2013-10-22 113 views
0

我想綁定到我的完整ViewModel,因爲轉換器需要ViewModel的兩個屬性來決定顏色。WPF綁定到ViewModel和更新視圖

{Binding Converter={StaticResource ErrorCountToSignalColorConverter} 

有了這個轉換器獲取ViewModel並可以讀取兩個屬性(ErrorCount和HasReceivedData)。但是,當其中一個屬性發生更改時,綁定不會更新。當然,這兩個屬性都會引發一個OnPropertyChange()。

當兩個屬性中的一個被更改時,如何實現更新視圖(使用正確的顏色)?

+2

我會考慮使用一個'MultiValueConverter',而是通過這兩個屬性到轉換器。這將導致轉換器在任何屬性改變時執行。 http://msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.aspx –

回答

2

你可以從使用MultiBinding視圖通過這兩個性能,但隨後的ErrorCount/HasReceivedData /信號之間的相關泄漏到UI代碼(和需要它每次使用時被重複)。視圖模型的主要目標之一是允許視圖與這樣的細節分開。

我建議使用一個枚舉表示一組的可能性:

public enum SignalLevel { 
    Low, 
    Medium, 
    High 
} 

的電流轉換器的邏輯然後應用到這些值,而不是顏色,並將其移動到一個單一的財產在視圖模型:

public SignalLevel SignalLevel { 
    get { 
     // choose a level based on ErrorCount and HasReceivedData 
    } 
} 

在視圖模型,每當ErrorCountHasReceivedData變化,提高NotifyPropertyChangedSignalLevel

在視圖中,做一個簡單的翻譯,從信號電平顏色:

{Binding SignalLevel, Converter={StaticResource SignalToColorConverter}} 
+0

儘管MultiBinding也解決了這個問題,但這是最好的解決方案,因爲它更簡單,更透明。 – ZoolWay