有一个 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 中的选择?
为什么要把命令放在有绑定属性(数据)的地方?
文档
获取组合框列并绑定它
SelectedItemBinding我们在 viewmodel 中创建一个属性,并在 setter 中编写代码调用: