DataGridComboBoxColumn - как привязать команду к смене значения?
Есть DataGrid, в нём задан столбец DataGridComboBoxColumn. Как привязать команду к смене значения выбранного элемента в нём? Пробовал через Interaction.Triggers, но он на DataGridComboBoxColumn похоже не работает.
Пробовал вот так вот через триггер :
<DataGridComboBoxColumn .. >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding DataContext.ChangeCategoryCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGridComboBoxColumn>
Но не срабатывает, хотя команда и путь к ней прописаны верно. С других событий на форме этот биндинг работает.
В качестве обходного решения сделал через обработчик событий в самом окне.
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<EventSetter Event="SelectionChanged" Handler="ComboBox_SelectionChanged"/>
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
(DataContext as RegistryDeviceViewModel).ChangeCategoryCommand.Execute(sender);
}
Но это ведь плохой стиль в рамках паттерна MVVM? Как правильно закрепить команду за сменой выбора в DataGridComboBoxColumn ?
Ответы (1 шт):
Зачем команду совать туда, где есть привязанное свойство (данные)?
Берём комбобокс колонку, привязываем SelectedItemBinding
<DataGridComboBoxColumn SelectedItemBinding="{Binding ComboItem}" ItemsSource="{Binding ComboItems}" />
Во вьюмодели делаем свойство, и в сеттере прописываем вызов кода:
private T _comboItem;
public T ComboItem
{
get => _comboItem;
set
{
_comboItem = value;
OnComboBoxValueChanged();
}
}
private void OnComboBoxValueChanged()
{
// вызовется при изменении значения
}