我使用 MVVM 模式已经有一段时间了,并且经常遇到一个属性的值取决于另一个属性的值的场景。例如,我有一个具有高度和宽度的控件,我想将控件上的高度和宽度显示为格式化字符串“{height} x {width}”。所以我在我的视图模型中包含以下属性:
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
DisplayString 属性,这似乎比使用 aIMultiValueConverter
从 Width 和 Height 属性进行转换要方便得多。不方便的部分是,在我需要为“宽度”或“高度”通知属性更改的任何地方,我还必须记住通知“显示字符串”。我可以想出无数种不同程度的自动化方法,但我的问题是,在 MVVM 中是否存在人们通常用来执行此操作的标准做法WPF
?