我正在使用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}"/>
答案 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();
}