如何将两个命令绑定到WPF按钮?

时间:2018-05-24 11:48:58

标签: c# wpf design-patterns mvvm binding

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

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

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

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

我的ViewModel:

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}"/>

1 个答案:

答案 0 :(得分:10)

可以在Trigger中更改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();
}