代码之家  ›  专栏  ›  技术社区  ›  Xsayar

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

  •  2
  • Xsayar  · 技术社区  · 8 年前

    我正在使用WPF和MVVM模式。我有一个按钮和两个命令。此外,我还有一个复选框。我想把不同的命令绑定到按钮上,这取决于复选框是否被选中

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

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

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

    我的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 回复  |  直到 6 年前
        1
  •  12
  •   ASh aminescm    8 年前

    可以更改触发器中的命令属性绑定:

    <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();
    }