1

在阅读了 WPF 中依赖属性的内部结构后,我想知道如何在 Silverlight 中为 WP7 实现依赖属性。调查使用了来自xda 论坛的反射器和 Dll 。

在 WPF 中:

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

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

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

)

但是在查看了DependencyObject类的GetValueSetValue方法的源代码后,我发现根本没有使用 _registeredProperties

有谁知道为什么以这种方式实施它?或者也许我错过了什么?先感谢您。

4

1 回答 1

2

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

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

于 2012-07-18T17:43:40.330 回答