【问题标题】:How can I bind two commands to WPF button?如何将两个命令绑定到 WPF 按钮?
【发布时间】:2018-05-24 11:48:58
【问题描述】:

我正在使用带有 MVVM 模式的 WPF。我有一个按钮,我有两个命令。此外,我有一个复选框。我想将不同的命令绑定到按钮上,具体取决于复选框 IsChecked 与否,例如

如果我点击我的按钮,它会显示一个消息框;

如果我选中复选框并单击我的按钮,它会显示一个新窗口或其他内容..

我对此有一个解决方案,但我认为可以有更好的解决方案:

我的视图模型:

ICommand command1 { get; set; }
ICommand command2 { get; set; }
ICommand commandSelector
{
    get
    {
        if (checkbox)
        {
            return command1;
        }
        else
        {
            return command2;
        }
    }
    private set { }
}

我的 XAML:

<Button Label="DO" Command="{Binding commandSelector}"/>

【问题讨论】:

标签: c# wpf xaml mvvm data-binding


【解决方案1】:

可以在触发器中更改 Command 属性绑定:

<Button Label="DO">    
    <Button.Style>        
        <Style TargetType="Button">            
            <Setter Property="Command" Value="{Binding command2}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=someCheckBox}" Value="True">
                    <Setter Property="Command" Value="{Binding command1}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>        
    </Button.Style>    
</Button>

但最好有一个命令,并根据命令处理程序中的检查状态执行不同的操作:

ICommand commandSelector { get; set; }

private void commandSelectorExecute(object o)
{
    if (checkbox)
       DoSmth();
    else 
       DoSmthElse();
}

【讨论】:

  • 我认为这是最好的方法。我不会更改 checkstate 上的命令,而是相反。
猜你喜欢
  • 2013-09-16
  • 2014-05-13
  • 2012-09-07
  • 1970-01-01
  • 2014-08-13
  • 2011-02-17
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多