在MVVM中,当一个属性的值依赖于另一个属性时,是否存在自动NotifyPropertyChanged的标准方法?

时间:2012-04-23 19:54:44

标签: c# wpf mvvm

我一直在使用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下使用标准做法吗?

2 个答案:

答案 0 :(得分:2)

没有标准的方法可以做到这一点。

您可以编写一个具有PropertyChanged帮助方法的基本viewmodel类。它将查看具有DependsOn属性的类的属性(您也将创建)以及依赖于更新属性的所有属性的fire事件。

答案 1 :(得分:1)

如果ViewModel中的属性之间存在许多依赖关系,则可以使用空字符串调用NotifyPropertyChanged以刷新从View绑定的所有元素。我没有看到自动化这一点。