我有两个列的datagrid:text和combobox。并且组合框应该与可观察的集合绑定。
这是数据网格项源的伪代码:
public class ModeObjectState
{
public int ID { get; set; }
public int ObjectTypeID { get; set; }
public string State { get; set; }
}
public class ModeObject
{
public string Name { get; set; }
public int objID { get; set; }
public int Type { get; set; }
public int StateID { get; set; }
public bool Format { get; set; }
}
public class _dataContext
{
public ObservableCollection<ModeObjectState> ListObjectState { get; set; }
public ModeObject ModeObj { get; set; }
}
ObservableCollection<_dataContext> SourceObjList
objTable.ItemsSource = SourceObjList;
这是datagrid的xaml代码:
<DataGrid x:Name="objTable" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="ColumnName" Binding="{Binding Path=ModeObj.Name}" IsReadOnly="True" />
<DataGridComboBoxColumn x:Name="ColumnState" ItemsSource="{Binding ListObjectState}" DisplayMemberPath="State" SelectedValuePath="ID" SelectedValueBinding="{Binding Path=ModeObj.StateID}" />
</DataGrid.Columns>
</DataGrid>
但是datagrid没有在comboboxcolumn中显示任何项目。请帮助我将datagridcombobox绑定到“_dataContext”类中的observable collection“ListObjectState”。
谢谢!
答案 0 :(得分:0)
使用INotifyPropertyChanged
_dataContext
实施
public class _dataContext : INotifyPropertyChanged
{
private ObservableCollection<ModeObjectState> _listObjectState;
public ObservableCollection<ModeObjectState> ListObjectState
{
get { return _listObjectState; }
set
{
_listObjectState = value;
OnPropertyChagned("ListObjectState");
}
}
public ModeObject ModeObj { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChagned(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
由于第一组可能在Binding
之后完成,因此它不会影响UI ..
答案 1 :(得分:0)
如果不查看整个代码,很难搞清楚。您有绑定问题,使用XAML调试工具(如Snoop或WPF Inspector)更容易找到问题所在。您只需附加正在运行的应用程序即可查看Datacontext。
您可以轻松找到datacontext是否有效。 WPF Inspector具有更好的用户界面,但它容易崩溃。按Ctrl + Shift并将鼠标悬停在控件上,以便在Snoop / WPF Inspected中反映出来。
另请参阅“输出”窗口,了解您遇到的绑定错误。