我一直在使用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属性,这似乎比使用IMultiValueConverter
从Width和Height属性转换更方便。不方便的部分是我需要NotifyPropertyChanged为“宽度”或“高度”,我还必须记住通知“DisplayString”。我可以在不同程度上考虑无数种自动化方法,但我的问题是人们通常在WPF
的MVVM下使用标准做法吗?
答案 0 :(得分:2)
没有标准的方法可以做到这一点。
您可以编写一个具有PropertyChanged帮助方法的基本viewmodel类。它将查看具有DependsOn属性的类的属性(您也将创建)以及依赖于更新属性的所有属性的fire事件。
答案 1 :(得分:1)
如果ViewModel中的属性之间存在许多依赖关系,则可以使用空字符串调用NotifyPropertyChanged以刷新从View绑定的所有元素。我没有看到自动化这一点。