什么是依赖属性?

什么是.Net 中的依赖属性(特别是在 WPF 上下文中)。与常规属性有什么区别?

61470 次浏览

Http://techpunch.wordpress.com/2008/09/25/WPF-WF-what-is-a-dependency-property/ 很好地解释了 WF 和 WPF 的依赖属性。

摘录如下:

关键点-解析依赖项属性的值

与任何属性一样,依赖项属性的最终目标是管理状态。但和平常不一样。净属性,则本地属性值不存储在实例变量中。

相反,依赖项属性被注册到依赖项属性框架中,并且底层属性值被解析——这意味着该值是由依赖项属性框架根据属性注册定义的规则确定的。

依赖属性是从 DependencyObject 派生的类的属性,它们的特殊之处在于它们不仅仅使用一个后备字段来存储它们的值,而是在 DependencyObject 上使用一些助手方法。

它们最好的一点是内置了数据绑定的所有管道。如果你绑定了什么东西,他们改变的时候会通知你的。

我发现唯一有用且写得很好的解释是这个: http://www.wpftutorial.net/dependencyproperties.html

从根本上说,DependencyProperties 不同于常规属性,因为它们不仅是类中字段的 setter/getter,而且在运行时动态检索它们的实际值。DP 的 SetValue()方法非常简单,它将属性的本地值设置为您给它的值。但是,当您尝试从 DependencyProperty 中查找 GetValue()时,它首先会查找一个本地值,如果没有本地值(这在 DependencyProperties 中是可行的,不像常规属性) ,它将继续沿逻辑 UI 树向上查找,直到找到这样的值。如果框架已经到达树的顶部而没有找到任何本地值,那么它将使用预定义的默认值作为属性的值。

此方法允许 DependencyProperties 比常规属性消耗更少的内存,因为只有用户显式设置的值才会存储在本地。

并且,如上所述,DependencyProperties 还允许我们在 XAML 代码中绑定到它们,并在它们上面设置触发器,这在常规属性上是不允许的。

我希望我已经设法澄清了其中的一些含糊之处:)