2012-04-19 86 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號,因爲我不喜歡這種邏輯的轉換器。它也易於單元測試,更容易理解和實施:)