wpf binding datagrid combobox datagridcomboboxcolumn

wpf - Enlace SelectedItem de ComboBox en DataGrid con diferente tipo



binding datagridcomboboxcolumn (1)

Tengo un DataGrid que contiene ComboBox como columna.

Consideremos que DataGrid tiene ItemsSource como ObservableCollection y ComboBox ItemsSource es Lista.

Deseo configurar la propiedad ComboBox SelectedItem en función de la propiedad en DataGrid ItemsSource.

Sin embargo, la clase de producto tiene la propiedad ProductTypeId de tipo int y no ProductType.

Entonces, ¿cómo puedo configurar ComboBox SelectedItem para que muestre el valor de Product.ProductTypeId como está seleccionado? Y también quiero enlazar SeletedItems con Mode = TwoWay para que cada vez que ComboBox SelectedItem cambie, se refleje en ItemsSource de DataGrid.

Cualquier ayuda sería muy apreciada.

Gracias.


DataGridComboBoxColumn hace exactamente lo que estás buscando. Para usarlo correctamente, debe comprender las siguientes propiedades:

  • SelectedValueBinding - este es el enlace a la propiedad en su objeto / modelo de vista
  • SelectedValuePath : esta es la propiedad de valor en los elementos dentro de ComboBox . Esto se asignará a la propiedad que establezca en SelectedValueBinding cuando el usuario seleccione un elemento del ComboBox .
  • DisplayMemberPath : esta es la propiedad de descripción en los elementos dentro de ComboBox

Configurar ItemsSource de DataGridComboBoxColumn es un poco diferente; nota mi ejemplo a continuación para ver cómo se hace.

Estos son los mismos (excepto SelectedValueBinding ) que tiene en un ComboBox estándar.

Aquí hay un ejemplo de cómo se vería su columna.

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