使用不同类型绑定DataGrid中ComboBox的SelectedItem

Max*_*com 2 wpf binding datagrid combobox datagridcomboboxcolumn

我有一个包含ComboBox作为列的DataGrid.

让我们考虑DataGrid将ItemsSource作为ObservableCollection而ComboBox ItemsSource是List.

我想基于DataGrid ItemsSource中的属性设置ComboBox SelectedItem属性.

但是,Product类具有类型为int而不是ProductType的属性ProductTypeId.

那么如何设置ComboBox SelectedItem以使其显示Product.ProductTypeId的值.而且我想将SeletedItems与Mode = TwoWay绑定,这样每当ComboBox SelectedItem发生变化时,它都会反映在DataGrid的ItemsSource中.

任何帮助将非常感激.

谢谢.

Bri*_*n S 7

DataGridComboBoxColumn正是你正在寻找的.要正确使用它,您需要了解以下属性:

  • SelectedValueBinding - 这是对象/ viewmodel上属性的绑定
  • SelectedValuePath - 这是内部项目的value属性ComboBox.SelectedValueBinding当用户从中选择项目时,这将分配给您设置的属性ComboBox.
  • DisplayMemberPath - 这是关于里面项目的描述属性 ComboBox

设置ItemsSourceDataGridComboBoxColumn是一个有点不同; 请注意下面的示例,看看它是如何完成的.

这些与标准相同(除外SelectedValueBinding)ComboBox.

以下是列的外观示例.

<DataGridComboBoxColumn Header="Product Type" DisplayMemberPath="ProductType" SelectedValuePath="ProductTypeId" SelectedValueBinding="{Binding ProductTypeId, UpdateSourceTrigger=PropertyChanged}">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="ItemsSource" Value="{Binding AvailableProductTypes}"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="ItemsSource" Value="{Binding AvailableProductTypes}"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
Run Code Online (Sandbox Code Playgroud)