2015-11-29 35 views
0

我目前正在挣扎的DataGrid WPF中MVVMDataGridComboBoxColumn和2点独立的集合

我有什么是数据网格,即绑定到一个集合。它按预期显示在DataGridTextColumn中并填充DataGrid。假设我有10个项目。但我还需要的是在每行中都有一个DataGridComboBoxColumn,它将绑定到单独的集合。它应该包含自己的价值观,对第一个集合没有态度。使用该DataGrid用户将确定两个逻辑上未连接的集合之间的绑定。

的XAML代码是:

<DataGrid Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" 
      ItemsSource="{Binding Path=ItemNamesSetting}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Initial Name item" Binding="{Binding Path=OriginalItemName}" /> 
     <DataGridTextColumn Header="Final Name item" Binding="{Binding Path=FinalItemName}" /> 
     <DataGridComboBoxColumn Header="Belongs to" Width="*" 
           ItemsSource="{Binding Path=AttributesBindingList}" 
           DisplayMemberPath="PropName"/> 
    </DataGrid.Columns> 
</DataGrid> 

虽然它在组合框显示空行。我已经看到了多个示例,这些示例使用DataGridComboBoxColumn绑定到数据,并通过某个外部键连接到集合之间。但我有两个不同的收藏,没有连接。

你能看看我这个绑定有问题吗?

+0

其中是定义的AttributesBindingList? – Ilan

+0

它在VM中设置如下: public ObservableCollection attributesBindingList; 公共的ObservableCollection AttributesBindingList { 得到 { 返回attributesBindingList; } set attributesBindingList = value; OnPropertyChangedHandler(“AttributesBindingList”); } } – Oleksii

回答

1

的DataContext你DataGridComboBoxColumn是ItemNamesSetting实例(您使用OriginalItemName和FinalItemName为DataGridTextColumns),所以使用AttributesBindingList在DataGridComboBoxColumn你需要ElementName属性来改变它的DataContext,例如:

<Grid DataContext="{Binding MainVM}" Name="MainGrid"> 
    <DataGrid ItemsSource="{Binding SomeCollection}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}"/> 
      <DataGridComboBoxColumn ItemsSource="{Binding DataContext.ComboBoxCollection, ElementName=MainGrid}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

例Ⅰ已经创建了VM(MainVM)作为DataContext for Grid。我们有两个属性 - SomeCollection和ComboBoxCollection,但DataGridComboBoxColumn使用MainGrid中的DataContext。

+0

很好的答案,谢谢。现在很清楚。我已编辑您的帖子以纠正XAML - 将Datagrid.Columns中的ItemSource移动到DataGrid。 – Oleksii

+0

是的,谢谢你,@Oleksii – Spawn