Связывание SelectedItem ComboBox в DataGrid с другим типом

У меня есть DataGrid, который содержит ComboBox как столбец.

Давайте рассмотрим DataGrid, имеющий ItemsSource как ObservableCollection и ComboBox ItemsSource как List.

Я хочу установить свойство ComboBox SelectedItem на основе свойства в DataGrid ItemsSource.

Однако класс Product имеет свойство ProductTypeId типа int, а не ProductType.

Итак, как я могу установить ComboBox SelectedItem так, чтобы он отображал значение Product.ProductTypeId как выбранное. А также я хочу связать SeletedItems с Mode = TwoWay, чтобы при изменении ComboBox SelectedItem он отражался в ItemsSource DataGrid.

Любая помощь приветствуется.

Спасибо.


person Maxcom    schedule 22.05.2013    source источник


Ответы (1)


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>
person Brian S    schedule 22.05.2013
comment
Тогда как мне работать с SelectedItemBinding? - person ed22; 30.05.2021