我有一个带有一个查询文本框和四个按钮的对话框。根据查询的结果,启用一个或多个按钮。TextBox 绑定到 VM 上的属性,每个按钮都绑定到 VM 上的命令
Command.IsEnabled 根据 QueryResult 更改
class ViewModel
{
public string Query {get;set;}
public QueryResult QueryResult {get;set;}
public ICommand FooCommand {get;set;}
public ICommand BarCommand {get;set;}
public ICommand BazCommand {get;set;}
public ICommand QuxCommand {get;set;}
}
<TextBox Text="{Binding Query, UpdateSourceTrigger=PropertyChanged}"/>
<Button Command="{Binding FooCommand}" Content="Foo"/>
<Button Command="{Binding BarCommand}" Content="Bar"/>
<Button Command="{Binding BazCommand}" Content="Baz"/>
<Button Command="{Binding QuxCommand}" Content="Qux"/>
有额外的逻辑来确定哪些启用的按钮应该是默认的(按下回车键时明显突出显示并激活)
(Foo 始终启用,如果 QueryResult.A 为非 null 则启用 Bar,如果 QueryResult.B 为非 null 则启用 Baz 等。可以启用多个命令,但是有一个固定的优先级优先顺序来确定默认值行动)
酒吧 > Baz > Foo > Qux
我的问题是如何在按钮上绑定 Button.IsDefault 以反映哪个应该是默认的。
我想到了以下选项-似乎都不正确
在 VM 上创建枚举属性 {btn1,btn2,btn3,btn4} DefaultButton。使用转换器将每个按钮的 IsDefault 属性绑定到此,该转换器将其参数与当前值进行比较
在 VM IsButton1Default 等上创建四个布尔属性...并绑定到这些
带有样式+数据触发器的东西,但这使我的 XAML 难以理解。
你会怎么做?