首页 文章

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

提问于
浏览
2

我有一个包含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中 .

任何帮助将非常感激 .

谢谢 .

1 回答

  • 6

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

    • SelectedValueBinding - 这是对象/ viewmodel上属性的绑定

    • SelectedValuePath - 这是 ComboBox 内项目的value属性 . 当用户从 ComboBox 中选择一个项目时,这将被分配给您在 SelectedValueBinding 中设置的属性 .

    • DisplayMemberPath - 这是 ComboBox 内项目的描述属性

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

    这些与标准 ComboBox 上的相同(除了 SelectedValueBinding ) .

    以下是列的外观示例 .

    <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>
    

相关问题