WPF 绑定到视图模型和视图更新

本文关键字:视图 更新 模型 WPF 绑定 | 更新日期: 2023-09-27 18:36:36

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

{Binding Converter={StaticResource ErrorCountToSignalColorConverter}

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

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

WPF 绑定到视图模型和视图更新

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

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

public enum SignalLevel {
    Low,
    Medium,
    High
}

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

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

在视图模型中,每当ErrorCountHasReceivedData发生变化时,都会引发SignalLevelNotifyPropertyChanged

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

{Binding SignalLevel, Converter={StaticResource SignalToColorConverter}}

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

MSDN 简单示例 - 多重绑定