我想绑定到我的完整ViewModel,因为转换器需要两个ViewModel属性来决定它的颜色。
{Binding Converter={StaticResource ErrorCountToSignalColorConverter}
使用此转换器获取ViewModel并可以读取两个属性(ErrorCount和HasReceivedData)。但是当其中一个属性发生更改时,绑定不会更新。当然,这两个属性都引发了OnPropertyChange()。
当其中一个属性发生变化时,如何实现要更新的视图(使用正确的颜色)?
答案 0 :(得分:2)
在这种情况下,您需要使用MultiValueConverter选择多重绑定。它会将多个属性(ErrorCount
和HasReceivedData
)绑定到View,并且会反映任何属性的任何更改。
答案 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
}
}
在视图模型中,每当ErrorCount
或HasReceivedData
发生变化时,请为NotifyPropertyChanged
加注SignalLevel
。
在视图中,执行从信号级到颜色的简单转换:
{Binding SignalLevel, Converter={StaticResource SignalToColorConverter}}