Datagridcomboboxcolumn绑定到Datagrid源项中的ObservableCollection

时间:2014-02-14 09:16:26

标签: wpf xaml binding datagridcomboboxcolumn

我有两个列的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”。

谢谢!

2 个答案:

答案 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调试工具(如SnoopWPF Inspector)更容易找到问题所在。您只需附加正在运行的应用程序即可查看Datacontext。

您可以轻松找到datacontext是否有效。 WPF Inspector具有更好的用户界面,但它容易崩溃。按Ctrl + Shift并将鼠标悬停在控件上,以便在Snoop / WPF Inspected中反映出来。

另请参阅“输出”窗口,了解您遇到的绑定错误。