【问题标题】:Internals of Dependency Property in WP7WP7 中依赖属性的内部结构
【发布时间】:2012-07-17 15:36:04
【问题描述】:

在阅读Internals of Dependeny Property in WPF 之后,我想知道如何在 Silverlight for WP7 中实现 Dependeny 属性。调查使用了来自xda forum 的反射器和 Dll。

在 WPF 中:

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

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

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

)

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

有谁知道为什么以这种方式实现它?或者也许我错过了什么? 提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

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

    当您在GetValueSetValue 中时,您已经有了对DP 的引用(它是方法的第一个参数)。因此,_registeredProperties 在那里毫无用处。 GetValueSetValue 都使用另一个字典 _valueTable,类型为 Dictionary&lt;DependencyProperty, EffectiveValueEntry&gt;_valueTable 是将值与 DP 相关联的实际集合。

    【讨论】:

    • 你是对的,@KooKiz。谢谢!也许你也知道为什么 CoreDependencyProperty 的值是通过本地调用存储在某个地方,而 CustomAttachedDependencyProperty 和 CustomDependencyProperty 的值存储在 DependencyObject 类的 _valueTable 字段中?
    • 不能肯定。这可能是因为某些控件(例如 WebBrowser)只是本机控件的包装器。因此,这些控件可能更容易拥有本机依赖属性。
    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多