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 deComboBox
. Esto se asignará a la propiedad que establezca enSelectedValueBinding
cuando el usuario seleccione un elemento delComboBox
. -
DisplayMemberPath
: esta es la propiedad de descripción en los elementos dentro deComboBox
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>