我在我的C# WPF应用程序中有一个ToggleButton,我想将一个Command绑定到Checked事件,将另一个Command绑定到Unchecked事件。
我目前拥有的是以下内容:
<ToggleButton Name="btnOpenPort" Style="{StaticResource myOnOffBtnStyle}" Content="Open Port"
Checked="btnOpenPort_Checked" Unchecked="btnOpenPort_Unchecked"
IsChecked="{Binding Path=PortViewModel.PortIsOpen, Mode=OneWay}"
Canvas.Left="75" Canvas.Top="80" Height="25" Width="100"/>
但这不是我想做的。因为在这种情况下,我必须在代码后台设置 Checked 和 Unchecked 事件的属性。
相反,我想在 ViewModel 中调用一个命令 (ICommand),一旦 Checked 或 Unchecked 事件被触发,这样我就不需要任何代码后台来控制我的切换按钮。有没有办法直接在 XAML 中绑定这两个事件的命令? 类似于 WPF “标准”按钮控件的命令属性?
编辑 以下是@har07提示方案的工作方式:
1:如果您还没有引用,请添加引用:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
2: 实现了Interaction.Triggers用于Checked和Unchecked事件:
<ToggleButton
Name="btnOpenPort" Style="{StaticResource myOnOffBtnStyle}" Content="Open Port"
IsChecked="{Binding Path=PortViewModel.PortIsOpen, Mode=OneWay}"
Canvas.Left="75" Canvas.Top="80" Height="25" Width="100">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding Path=PortViewModel.OpenPort}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding Path=PortViewModel.ClosePort}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ToggleButton>
通过这个解决方案,我不需要更改ViewModel或代码后台中的任何一行代码。
我只需要调用我的ICommand,就像按照MVVM模式使用标准按钮一样。