2012-12-29 27 views
0

我在DataGrid中有DataGridComboBoxColumn和一个WPF窗口。我分配的DataContext到窗口,如下所示:如何将DataTable绑定到DataGridComboBoxColumn

cls = new MyClass 
      { 
       selValue = 2, 
       DataGrid = dtGrid, 
       ComboGrid = dtCombo 
      }; 


      this.DataContext = cls; 

以下是XAML为DataGridComboBoxColumn:

<DataGridComboBoxColumn Header="Item Name" SelectedValueBinding="{Binding Path=Item_Id}" SelectedValuePath="ItemId" DisplayMemberPath="ItemName"> 
      <DataGridComboBoxColumn.ElementStyle> 
       <Style TargetType="ComboBox"> 
<!-- modified this code as per suggestion ///--> 
        <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.ComboGrid }" /> 
       </Style> 
      </DataGridComboBoxColumn.ElementStyle> 
      <DataGridComboBoxColumn.EditingElementStyle> 
       <Style TargetType="ComboBox"> 
        <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.ComboGrid }" /> 
       </Style> 

      </DataGridComboBoxColu 

mn.EditingElementStyle>

电网还是组合框显示空白。 Combobox中没有列出数据。然后,我在Windows代码隐藏中编写了以下代码,它开始工作。

((DataGridComboBoxColumn)this.testGrid.Columns[1]).ItemsSource = cls.ComboGrid.DefaultView; 

反正是有使用处理MVVM这种情况下,XMAL本身?我不愿意使用这个应用程序。

回答

2

如果的ItemsSource不是数据网格内的ItemsSource你将不得不寻找祖先:

<DataGridComboBoxColumn itemsSource="{binding RelativeSource={RelativeSource ancestortype=Page}, path=DataContext.YourComboboxItemsSource}" /> 

假设你的DataGrid是一个页面上,你可以将ancestortype改变任何东西。你可以在任何东西上使用relativeSource。不得不使用它的原因是你试图设置的itemssource不是层次结构的一部分,所以它找不到它。希望这可以帮助。

MVVM我会做这样的事情:

public list<string> ComboboxGridItemsSource { get; set; } 
//Then add some data in the property above. 
ComboboxGridItemsSource.add("Hello world1"); , ect... 

而当这个名单被改变/更新的记得,提高使用INotifyPropertyChanged的属性。

//After you implement INotifyPropertyChanged you can raise like this: 
RaiseProperty("ComboboxGridItemsSource"); 

使用MVVM,您通常不会手动将属性直接设置到控件,而是将属性绑定到xaml中的该控件。

+0

但是,这种方法并不适合我。相反,它为我提供了解决上述问题的线索。我修改了我原来的帖子来应用这个结果。它对我来说非常合适。谢谢 – Nps