4

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

让我们考虑 DataGrid 具有 ItemsSource 作为 ObservableCollection 和 ComboBox ItemsSource 是 List 。

我想根据 DataGrid ItemsSource 中的属性设置 ComboBox SelectedItem 属性。

但是 Product 类具有 int 类型的属性 ProductTypeId 而不是 ProductType。

那么如何设置 ComboBox SelectedItem 以便将 Product.ProductTypeId 的值显示为选中状态。而且我还想将 SelectedItems 与 Mode = TwoWay 绑定,这样每当 ComboBox SelectedItem 发生变化时,它就会反映在 DataGrid 的 ItemsSource 中。

任何帮助将非常感激。

谢谢。

4

1 回答 1

8

DataGridComboBoxColumn完全符合您的要求。要正确使用它,您需要了解以下属性:

  • SelectedValueBinding- 这是对您的对象/视图模型上的属性的绑定
  • SelectedValuePath - 这是ComboBox. 当SelectedValueBinding用户从ComboBox.
  • DisplayMemberPath - 这是内部项目的描述属性ComboBox

ItemsSource的设置DataGridComboBoxColumn有点不同;请注意我下面的示例,看看它是如何完成的。

这些与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>
于 2013-05-22T16:47:47.650 回答