繁体   English   中英

WPF绑定到ViewModel并更新视图

[英]WPF Binding to ViewModel and update of view

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

{Binding Converter={StaticResource ErrorCountToSignalColorConverter}

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

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

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

MSDN简单化示例-多重绑定

您可以使用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引发SignalLevel

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

{Binding SignalLevel, Converter={StaticResource SignalToColorConverter}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM