0

我有一个带有一个查询文本框和四个按钮的对话框。根据查询的结果,启用一个或多个按钮。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 以反映哪个应该是默认的。

我想到了以下选项-似乎都不正确

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

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

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

你会怎么做?

4

1 回答 1

0

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

于 2012-04-19T08:46:05.370 回答