xaml:datagrid中的多个选定项目,每个数据网格都有一个组合框,selecteditem更改每个组合框 - 只应更改选定的组合框

时间:2014-01-15 09:05:54

标签: list xaml mvvm datagrid combobox

我有一个像这样的数据网格:

  <DataGrid ItemsSource="{Binding Path=MyItems, Mode=OneWay}"
      SelectedItem="{Binding SelectedItem, Mode=TwoWay}">

在datagrid的每个项目中,我有一个带有项目列表的组合框:

<ComboBox ItemsSource="{Binding SelectedItem.SubItems}"
      SelectedItem="{Binding SelectedComboItem}"
      IsSynchronizedWithCurrentItem="True"/>

不幸的是,每当我更换1个组合框时,所有其他组合框也会改变他们选择的项目。

帮助!我现在正在寻找一整天的解决方案......

1 个答案:

答案 0 :(得分:1)

这里有一个简单的示例来自这里使用的东西,我已经删除了除数据网格中的组合框之外的所有内容,所以希望你能看到你的绑定/逻辑出错了:

<sdk:DataGrid x:Name="MyDatagrid" AutoGenerateColumns="False" ItemsSource="{Binding MyItems}">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn Width="Auto" Header="Combo column"  IsReadOnly="False">
            <sdk:DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding SubItems, Mode=OneWay}" SelectedItem="{Binding SelectedComboItem,Mode=TwoWay}" />
                </DataTemplate>
            </sdk:DataGridTemplateColumn.CellEditingTemplate>
        </sdk:DataGridTemplateColumn>
    </sdk:DataGrid.Columns>
</sdk:DataGrid> 

注意事项: MyItems是ViewModel属性 SubItems是MyItems中项目类的属性,而不是ViewModel。如果你想让你的组合框ItemSource来自viewmodel那么你将需要像:

{Binding DataContext.AllComboItems,  RelativeSource={RelativeSource AncestorType=sdk:DataGrid}, Mode=OneWay}

SelectedComboItem也是MyItems中项目类的属性,而不是ViewModel。