WPF绑定到ViewModel并更新视图

时间:2013-10-22 16:33:42

标签: c# .net wpf mvvm binding

我想绑定到我的完整ViewModel,因为转换器需要两个ViewModel属性来决定它的颜色。

{Binding Converter={StaticResource ErrorCountToSignalColorConverter}

使用此转换器获取ViewModel并可以读取两个属性(ErrorCount和HasReceivedData)。但是当其中一个属性发生更改时,绑定不会更新。当然,这两个属性都引发了OnPropertyChange()。

当其中一个属性发生变化时,如何实现要更新的视图(使用正确的颜色)?

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要使用MultiValueConverter选择多重绑定。它会将多个属性(ErrorCountHasReceivedData)绑定到View,并且会反映任何属性的任何更改。

MSDN simplistic example - Multibinding

答案 1 :(得分:2)

您可以使用MultiBinding从视图中传递这两个属性,但随后ErrorCount / HasReceivedData / Signal之间的依赖关系泄漏到UI代码中(每次使用时都需要重复)。视图模型的主要目标之一是允许将视图与此类细节分开。

我建议使用枚举来表示一系列可能性:

public enum SignalLevel {
    Low,
    Medium,
    High
}

然后将当前转换器逻辑应用于这些值而不是颜色,并将其移动到视图模型中的单个属性:

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

在视图模型中,每当ErrorCountHasReceivedData发生变化时,请为NotifyPropertyChanged加注SignalLevel

在视图中,执行从信号级到颜色的简单转换:

{Binding SignalLevel, Converter={StaticResource SignalToColorConverter}}