2013-10-09 34 views
3

我有一個ICommandButton推將觸發。發生這種情況時,我需要更改此Button的背景顏色。我怎樣才能使用MVVM模式做到這一點?更改按鈕顏色上單擊MVVM模式

private DelegateCommand asioMuted; 

public ICommand AsioMuted 
{ 
    get 
    { 
     if (asioMuted == null) 
     { 
      asioMuted = new DelegateCommand(MuteAsio); 
     } 

     return asioMuted; 
    } 
} 

XAML:

<Button Content="Mute" 
     Command="{Binding AsioMuted}" 
     HorizontalAlignment="Left" 
     Margin="29,282,0,0" 
     VerticalAlignment="Top" 
     Width="42" 
     RenderTransformOrigin="-0.273,1.818" /> 
+0

顏色是否改變了你的ViewModel中的某些邏輯?否則,爲什麼不讓視圖處理它呢? – Alyce

回答

4

綁定按鈕的背景顏色在您的視圖模型畫筆屬性。然後,讓ICommand更改視圖模型上畫筆的顏色。有些人可能還建議將顏色綁定到ViewModel上的IsMuted屬性,然後使用轉換器將真/假轉換爲畫筆。這種方法從ViewModel中刪除了任何UI特定的細節。

+0

我會在按鈕的代碼背後執行此操作嗎?我不確定這是否是最佳做法。 – user547794

+0

號在你已經綁定按鈕的命令屬性到一個ICommand的視圖模型以同樣的方式,只是創建類型的SolidColorBrush的視圖模型,例如另一個屬性,並綁定到該按鈕的背景屬性。 (你可以使用任何一種刷) – Quanta

0

@Quanta代碼隱藏可包含實現視覺行爲UI邏輯代碼,因此更改在ViewModel刷子的顏色是針對MVVM模式。

視圖定義和處理UI視覺行爲,如動畫或 躍遷可以從一個狀態改變在視圖 模型或通過用戶與用戶界面的交互而被觸發。 支持我的話:http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx

+1

我同意,這就是爲什麼我寫了一篇關於綁定到IsMuted屬性,而不是粘附於MVVM的部分。就我個人而言,在我的項目中沒有太多的價值,所以我認爲我會表達兩種觀點。 – Quanta