【发布时间】:2014-11-04 21:24:58
【问题描述】:
我的 C# WPF 应用程序中有一个 ToggleButton,我想将一个命令绑定到 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 事件设置属性。 相反,一旦 Checked 或 Unchecked 事件被触发,我想在我的 ViewModel 中调用一个命令 (ICommand),这样我的切换按钮就不需要任何代码隐藏。
有没有办法在 XAML 中直接为这两个事件绑定命令? 类似于WPF中“标准”按钮控件的command属性?
编辑 这就是 @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:
<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 中的一行代码或我的代码。 我可以像使用遵循 MVVM 模式的标准按钮一样调用我的 ICommand。
【问题讨论】:
标签: wpf xaml command togglebutton