我已经使用 MVVM 模式有一段时间了,经常遇到一个属性的值取决于另一个属性的值的情况。例如,我有一个具有高度和宽度的控件,我想将控件上的高度和宽度显示为格式化字符串“{height} x {width}”。因此,我在 View 模型中包含以下属性:
public class FooViewModel : INotifyPropertyChanged
{
// . . .
private double _width;
public double Width
{
get { return _width; }
set
{
if(_width != value)
{
_width = value;
NotifyPropertyChanged("Width");
NotifyPropertyChanged("DisplayString"); // I had to remember to
// do this.
}
}
}
public string DisplayString
{
get
{
return string.Format("{0} x {1}", _width, _height);
}
}
// . . .
}
然后,我将 Label
的内容绑定(bind)到 DisplayString 属性,这似乎比使用 IMultiValueConverter
从 Width 和 Height 属性进行转换要方便得多。不方便的部分是,在任何需要通知“宽度”或“高度”的属性更改的地方,我还必须记住通知“显示字符串”。我可以想出无数种不同程度的自动化方法,但我的问题是,是否存在人们通常在 WPF
中的 MVVM 下执行此操作的标准实践?
最佳答案
不,没有标准方法可以做到这一点。
您可以编写一个具有 PropertyChanged 辅助方法的基本 View 模型类。它将查看具有 DependsOn 属性(您也将创建)的类的属性,并为依赖于更新属性的所有属性触发事件。
关于c# - 在MVVM中,当一个属性的值依赖于另一个属性时,是否有一种标准方法可以自动NotifyPropertyChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287317/