假设在某个抽象 ViewModel 基类中,我有一个普通的旧属性,如下所示:
public Size Size
{
get { return _size; }
set
{
_size = value;
OnPropertyChanged("Size");
}
}
然后,我创建一个更具体的 ViewModel,继承前一个视图模型,其中包含以下属性:
public Rect Rectangle
{
get { return new Rect(0, 0, _size.Width, _size.Height); }
}
现在,在某些 View 类中,我绑定到上述 ViewModelRectangle
财产。一切正常,直到我改变尺寸。什么时候Size
变化,Rectangle
不知道这一点,并且更改不会传播到视图。自从Rectangle
在子类中,我不能简单地添加一个OnPropertyChanged("Rectangle")
to the Size
setter.
现在想象一下我有许多不同的属性,例如Rectangle
,所有这些都依赖于基类属性,并且这些更改都不会被传播。我需要一种轻量级且优雅的方式来链接更改通知,最好是不需要大量代码并且不会强迫我使用依赖属性的方式。
显然这里有很多丑陋的解决方案——我正在寻找的是干净而聪明的东西。在我看来,这将是一个非常常见的情况,而且在我看来,可能有一个MVVM 友好这样做的方法。
我最近在博客中讨论了这个确切的问题。我包括一个[DependsUpon("Size")]
属性与矩形。我真的很喜欢这种方法,因为它将依赖关系知识与创建依赖关系的代码一起保留,而不是相反。
看一看:http://houseofbilz.com/archive/2009/11/14/adventures-in-mvvm----dependant-properties-with-inotifypropertychanged.aspx http://houseofbilz.com/archive/2009/11/14/adventures-in-mvvm----dependant-properties-with-inotifypropertychanged.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)