更改MVVM层次结构中的通知

Cha*_*lie 15 wpf mvvm inotifypropertychanged

让我们说一些抽象的ViewModel基类我有一个普通的属性如下:

public Size Size
{
    get { return _size; }
    set
    {
        _size = value;
        OnPropertyChanged("Size");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个更具体的ViewModel,继承自前一个,包含以下属性:

public Rect Rectangle
{
    get { return new Rect(0, 0, _size.Width, _size.Height); }
}
Run Code Online (Sandbox Code Playgroud)

现在,在一些View类中,我绑定到前面提到的ViewModel的Rectangle属性.一切正常,直到我改变大小.当Size变化,Rectangle不知道它和变化不会传播到视图.因为Rectangle在子类中,我不能简单地添加OnPropertyChanged("Rectangle")Sizesetter.

现在假设我有许多不同的属性Rectangle,它们都依赖于基类属性,并且没有传播这些更改.我需要一些轻量级和优雅的链接更改通知的方法,最好是不需要大量代码并且不强迫我使用依赖项属性的方法.

显然这里有很多丑陋的解决方案 - 我正在寻找的是干净而聪明的东西.在我看来,这将是一个非常常见的场景,在我看来可能有一种MVVM友好的方式来做到这一点.

Bri*_*sio 9

我最近在博客上写到了这个确切的问题.我[DependsUpon("Size")]在Rectangle中包含一个属性.我真的很喜欢这种方法,因为它将依赖性知识与创建依赖性的代码保持在一起,而不是相反.

看看:http://houseofbilz.com/archive/2009/11/14/adventures-in-mvvm----dependant-properties-with-inotifypropertychanged.aspx