WP7中依赖属性的内部结构

时间:2012-07-18 14:47:06

标签: c# windows-phone-7 dependency-properties

阅读Internals of Dependeny Property in WPF后,我想知道如何在Silverlight for WP7中实现Dependeny Properties。对于调查,使用了来自xda forum的Reflector和Dll。

在WPF中:

  

DependencyProperty维护所有的静态引用   您在WPF对象层次结构中注册的DependencyProperty。它坚持   一个名为PropertyFromName的HashTable,它在内部使用它来获取   DependencyProperty对象。所以换句话说,每个dependencyProperty   object在全局HashTable中注册。

在Silverlight for WP7中,DependencyProperties具有几乎相同的全局HashTable(实际上它是

static Dictionary<Type, Dictionary<string, DependencyProperty>> _registeredProperties 

但是在查看 DependencyObject 类的 GetValue SetValue 方法的源代码后,我看到_ registeredProperties < / em>根本没用过。

有人知道为什么以这种方式实施吗?或许我错过了什么? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你确实错过了一些东西。 _registeredProperties字典(以及它在WPF中具有的等效字典)用于通过名称检索依赖项属性。它主要用于绑定机制(框架必须从类似{Binding Path=PropertyName}的表达式中检索DP)。

当您在GetValueSetValue时,您已经拥有对DP的引用(它是该方法的第一个参数)。因此,_registeredProperties在那里没用。 GetValueSetValue都使用_valueTable类型的另一个字典Dictionary<DependencyProperty, EffectiveValueEntry>_valueTable是将值与DP关联的实际集合。