我有一个包含一个查询TextBox和四个按钮的对话框。 根据查询结果,启用一个或多个按钮。 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等。可以启用多个命令,但是有一个固定的优先顺序排列,确定默认操作)
Bar&gt; Baz&gt; Foo&gt; Qux
我的问题是如何将Button.IsDefault绑定到按钮上以反映哪一个应该是默认值。
我想到了以下几种选择 - 两者似乎都不正确
在VM上创建枚举属性{btn1,btn2,btn3,btn4} DefaultButton。使用将其参数与当前值进行比较的转换器将每个按钮IsDefault属性绑定到此
在VM IsButton1Default等上创建四个布尔属性...并绑定到这些
样式+数据触发器的东西,但这使我的XAML难以理解。
你会做什么?
答案 0 :(得分:0)
我会选择2号,因为我不喜欢这种逻辑的转换器。它也易于单元测试,更易于理解和实施:)