gpt4 book ai didi

wpf - 将命令绑定(bind)到 ToggleButton Checked 和 Unchecked 事件

转载 作者:行者123 更新时间:2023-12-04 00:04:28 25 4
gpt4 key购买 nike

我的 C# WPF 应用程序中有一个 ToggleButton,我想将一个命令绑定(bind)到 Checked 事件,将一个 Command 绑定(bind)到 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 中的这两个事件绑定(bind)命令?
类似于 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: 为 Checked 和 Unchecked 事件实现了 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。

最佳答案

您可能无法直接为每个已选中和未选中的命令绑定(bind)两个命令,但是您仍然可以绑定(bind)一个命令,该命令将为两者调用。如果您需要针对两个事件使用不同的命令,您还可以选择附加行为。

<ToggleButton Command="{Binding MyCommand}"/>

在虚拟机中

public ICommand MyCommand { get; private set; }

您将需要相应地对其进行初始化

为了确定当前状态,您可能对保税属性(property)有条件 PortIsOpen
void Execute(object state)
{
if(PortIsOpen)
{
//checked
}
else
{
//unchecked
}
}

或者你也可以将它作为参数传递

例如
<ToggleButton Command="{Binding MyCommand}" 
CommandParameter="{Binding IsChecked,RelativeSource={RelativeSource Self}}"/>

并将其用作

void Execute(object state)
{
if((bool)state)
{
//checked
}
else
{
//unchecked
}
}

关于wpf - 将命令绑定(bind)到 ToggleButton Checked 和 Unchecked 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25778802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com