为什么依赖属性?

问题描述:

为什么微软走了制作依赖属性和依赖对象的路线,而不是使用反射和可能的属性?为什么依赖属性?

+0

因此,依赖项属性的默认值被存储在哪里。他们也在消耗记忆力,不是吗?另外,如果我们改变文本框控件的“Text”dp,那么改变后的值将只存储在该对象的Hashtable(特定的文本框)中?如果是这样的话,那么默认值+改变了数值......加倍了memory..ufff。让我知道你的意见,Regards Rakesh www.qtricks.com – 2011-12-03 10:09:25

+0

@Rajesh库马尔:默认值存储静态。因此,减少的足迹,因为你只有一个值的所有实例。 – user879355 2012-07-04 08:14:00

这帮助我理解了一个道理:

的主要区别是,一个正常的.NET属性的值直接从您类私有成员阅读,而DependencyProperty的价值当调用从DependencyObject继承的GetValue()方法时,动态解析为

当设置它并不存储在你的对象的字段依赖项属性的值,但在词典键和值由基类的DependencyObject提供。条目的关键是属性的名称,值是您要设置的值。是

依赖属性的优点如下:

减少了内存占用

这是一个巨大耗散存储字段为每个属性,当你认为一个UI的性能超过90%控制通常保持其初始值。依赖属性通过仅在实例中存储修改的属性来解决这些问题。默认值在依赖项属性中存储一次。

值继承

当你访问一个依赖属性的值是通过使用值解析策略解决。如果未设置本地值,则依赖项属性会导航逻辑树直至找到值。当您在根元素上设置FontSize时,它将应用于下面的所有文本块,但您会覆盖该值。

更改通知

依赖属性有一个内置的更改通知机制。通过在属性元数据中注册回调,当属性的值发生变化时,您会收到通知。这也被数据绑定使用。

来自:WPF Tutorials

+1

感谢您的好评。即使阅读了关于DP的所有MSDN文档之后,我仍然有些迷惑,直到我阅读您的回复。 – 2010-12-06 01:05:43

Dependency properties解决与反射和属性解决不同的使用场景。

依赖属性为标准属性无法处理的事情提供了一个统一的API。