2014-02-14 18 views
0

我有两列datagrid:文本和组合框。组合框应该对可观察的集合有约束力。Datagridcomboboxcolumn绑定到ObservableCollection项目中的Datagrid源文件

这是DataGrid的项目源伪代码:对于数据网格

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; 

这是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集合“ListObjectState”。

谢谢!

+0

你在哪里填充集合'SourceObjList'和'ListObjectState'? –

+0

我在窗口的构造函数中填充它们一次。 –

+0

你可以在'InitializeComponent'调用之前做一件事来初始化这些集合,看看它是否有效。 –

回答

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 ..

+0

它不工作( –

+0

检查更新的答案... – Sankarann

+0

它并不能帮助我,我不能找到问题 –

0

它很难找出不看整个代码。你已经绑定的问题,它会更容易寻找到的问题是使用XAML的调试工具,如SnoopWPF Inspector。您只需要附加正在运行的应用程序即可查看Datacontext。

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

另请参阅您的输出窗口了解最新的绑定错误。

相关问题