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

Wpf 根据viewmodel状态更改默认按钮(IsDefault),wpf,mvvm,Wpf,Mvvm,我有一个对话框,有一个查询文本框和四个按钮。 根据查询结果,将启用一个或多个按钮。 文本框绑定到VM上的属性,每个按钮都绑定到VM上的命令 Command.IsEnabled基于QueryResult的更改 class ViewModel { public string Query {get;set;} public QueryResult QueryResult {get;set;} public ICommand FooCommand {get;set;} public IC

我有一个对话框,有一个查询文本框和四个按钮。 根据查询结果,将启用一个或多个按钮。 文本框绑定到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"/>
当按下enter键时,有额外的逻辑来确定哪些已启用的按钮应该是默认的明显突出显示和激活的按钮

Foo始终处于启用状态,如果QueryResult.A为非空,则Bar处于启用状态,如果QueryResult.B为非空,则Baz处于启用状态,等等。可以启用多个命令,但有一个固定的优先顺序优先顺序确定默认操作

酒吧>酒吧>美食>曲棍球

我的问题是如何绑定Button.IsDefault按钮,以反映哪个按钮应为默认值

我想到了以下两种选择——这两种选择似乎都不对

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

在VM上创建四个布尔属性IsButton1Default等。。。把它们绑在一起

样式+数据触发器,但这使我的XAML难以理解


你会怎么做?

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