0

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

{Binding Converter={StaticResource ErrorCountToSignalColorConverter}

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

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

4

2 回答 2

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发生变化,都NotifyPropertyChangedSignalLevel.

在视图中,做一个从信号电平到颜色的简单转换:

{Binding SignalLevel, Converter={StaticResource SignalToColorConverter}}
于 2013-10-22T16:55:50.377 回答
2

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

MSDN 简单示例 - 多重绑定

于 2013-10-22T16:36:45.090 回答