2012-04-19 89 views
0

我有一个查询文本框和四个按钮的对话框。 根据查询的结果,启用一个或多个按钮。 文本框被绑定到VM的属性和每个按钮被绑定到命令在VM基于QueryResult中更改基于视图模型状态的默认按钮(IsDefault)

Command.IsEnabled变化

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是非空的,则启用Bar,如果QueryResult.B非空,则启用Baz等。可以启用多个命令,但是具有确定的优先顺序的固定优先顺序网元进行默认操作)

酒吧>巴兹>美孚> Qux

我的问题是如何上的按钮Button.IsDefault结合,以反映一个应该是默认。

我想过下列选项 - 这两者都不似乎是正确

  1. 创建一个枚举属性{BTN1,BTN2,btn3,btn4} DefaultButton上的VM。绑定每个按钮ISDEFAULT属性,这与它的参数比较当前值

  2. 在VM IsButton1Default等创建四个布尔值转换器...并绑定到这些

  3. 一些与风格+ datatriggers但这使我的XAML难以理解。

你会做什么?

回答

0

我会选择2号,因为我不喜欢这种逻辑的转换器。它也易于单元测试,更容易理解和实施:)