Binding SelectedItem of ComboBox in DataGrid with different type

我的未来我决定 提交于 2019-12-12 09:01:39

问题


I have a DataGrid which contains ComboBox as column.

Let consider DataGrid having ItemsSource as ObservableCollection and ComboBox ItemsSource is List .

I want to set the ComboBox SelectedItem property based on property in DataGrid ItemsSource.

However Product class has property ProductTypeId of type int and not ProductType.

So how can I set ComboBox SelectedItem so that it display value of Product.ProductTypeId as selected. And also I want to bind SeletedItems with Mode = TwoWay so that whenever ComboBox SelectedItem changes it will be reflected in DataGrid's ItemsSource.

Any help would be much appreciated.

Thanks.


回答1:


The DataGridComboBoxColumn does exactly what you're looking for. To use it correctly, you need to understand the following properties:

  • SelectedValueBinding - this is the binding to the property on your object/viewmodel
  • SelectedValuePath - this is the value property on the items inside the ComboBox. This will be assigned to the property you set in SelectedValueBinding when the user selects an item from the ComboBox.
  • DisplayMemberPath - this is the description property on the items inside the ComboBox

Setting the ItemsSource of the DataGridComboBoxColumn is a little different; note my example below to see how it is done.

These are the same (except for SelectedValueBinding) as you have on a standard ComboBox.

Here is an example of what your column might look like.

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


来源:https://stackoverflow.com/questions/16697121/binding-selecteditem-of-combobox-in-datagrid-with-different-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!