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