让我解释一下我的要求:
我有一个包含几个这样的复选框的网格:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox>1</CheckBox>
<CheckBox
Grid.Column="1">2</CheckBox>
</Grid>
我清楚地知道如何使用 mvvm light EventToCommand 绑定(bind)到命令(在我的 VM 或其他任何地方定义)。
但是,众所周知,我有多个复选框。所以我必须这样做:
<CheckBox
Content="1">
<i:Interaction.Triggers>
<i:EventTrigger
EventName="Checked">
<ml:EventToCommand
Command="{Binding SomeCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
<CheckBox
Grid.Column="1"
Content="2">
<i:Interaction.Triggers>
<i:EventTrigger
EventName="Checked">
<ml:EventToCommand
Command="{Binding SomeCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
如果我有更多的复选框,我必须一次又一次地 C+V 以使每个复选框具有相同的 EventToCommand 行为。
更烦人的是,我们还有另一个名为 Unchecked 的事件。通常 Checked 和 Uncheck 的回调是完全一样的。所以我必须一次又一次地 C+V 一次又一次…………
最后我的 XAML 又长又复杂!
===============================================
我正在考虑一些这样的解决方法:
我查看了 Checked 和 Unchecked 事件的源代码,发现它们都是 RoutedEvent,模式为 Bubble,这意味着这个路由事件调用会冒泡到包含它们的网格。
所以我这样写了我的 XAML 代码:
<Grid>
<i:Interaction.Triggers>
<i:EventTrigger
EventName="ToggleButton.Checked">
<ml:EventToCommand
Command="{Binding TestCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
......several check boxes......
</Grid>
但是上面的代码不起作用。 Checked 和 Unchecked 都不是 ATTACHED 事件。
然后我删除了“ToggleButton.”,像这样:
<i:EventTrigger
EventName="Checked">
<ml:EventToCommand
Command="{Binding TestCommand}" />
</i:EventTrigger>
还是行不通! :(
事件应该冒泡到网格上,不是吗?
那么,有人对此有什么好主意吗?
谢谢!
最佳答案
您可以定义一个隐式 Style
为所有 CheckBoxes
在 Grid
:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.Resources>
<Style TargetType="CheckBox">
<Setter Property="Command" Value="{Binding SomeCommand}" />
</Style>
</Grid.Resources>
<CheckBox>1</CheckBox>
<CheckBox Grid.Column="1">2</CheckBox>
</Grid>
而不是处理
Checked
和 Unchecked
事件,您可以绑定(bind)到 IsChecked
每个 CheckBox
的属性到源属性:<CheckBox IsChecked="{Binding IsFirstChecked}">1</CheckBox>
关于c# - 如何利用 MVVM Light EventToCommand 在 XAML 中绑定(bind)大量相同的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52535390/