什么是.Net中的依赖属性(特别是在WPF上下文中).常规财产有什么区别?
依赖属性是从DependencyObject派生的类的属性,它们是特殊的,而不是简单地使用支持字段来存储它们的值,它们在DependencyObject上使用一些辅助方法.
关于它们最好的事情是它们内置了数据绑定的所有管道.如果你将它们绑定到它们,它们会在它们发生变化时通知它.
我发现唯一有用且写得很好的解释是:http://www.wpftutorial.net/dependencyproperties.html
基本上,DependencyProperties与常规属性的不同之处在于它们不仅仅是类中字段的setter/getter,而是在运行时动态检索它们的实际值.SetValue()
DP 的方法非常简单,并将属性的本地值设置为您给出的值.但是,当您尝试GetValue()
从DependencyProperty中时,它将首先查找本地值,如果不存在(这在DependencyProperties中不同于常规属性),它将继续向上逻辑UI树,直到找到这样的值.如果框架已到达树的顶部而未找到任何本地值,则它将使用预定义的默认值作为属性的值.
此方法允许DependencyProperties比常规属性消耗更少的内存,因为只有用户显式设置的值才会存储在本地.
并且,如上所述,DependencyProperties还允许我们在XAML代码中绑定它们并在它们上设置触发器,这些触发器不允许使用常规属性.
我希望我已经设法清除了一些模糊性:)
http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/在WF和WPF的上下文中提供了依赖属性的良好解释.
摘录:
关键点 - 依赖属性的价值得到了解决
与任何属性一样,依赖属性的最终目标是管理状态.但与普通的.Net属性不同,本地属性值不存储在实例变量中.
相反,依赖项属性在依赖项属性框架中注册,并且底层属性值已解析 - 这意味着该值由依赖项属性框架根据属性注册定义的规则确定.