根据viewmodel状态更改默认按钮(IsDefault)

时间:2012-04-19 08:32:06

标签: wpf mvvm

我有一个包含一个查询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绑定到按钮上以反映哪一个应该是默认值。

我想到了以下几种选择 - 两者似乎都不正确

  1. 在VM上创建枚举属性{btn1,btn2,btn3,btn4} DefaultButton。使用将其参数与当前值进行比较的转换器将每个按钮IsDefault属性绑定到此

  2. 在VM IsButton1Default等上创建四个布尔属性...并绑定到这些

  3. 样式+数据触发器的东西,但这使我的XAML难以理解。

  4. 你会做什么?

1 个答案:

答案 0 :(得分:0)

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