2012-07-18 66 views
1

在閱讀Internals of Dependeny Property in WPF後,我想知道在Silverlight for WP7中如何實現Dependeny屬性。對於調查使用來自xda forum的Reflector和Dll。WP7中內部屬性的依賴屬性

在WPF:

一個DependencyProperty維護所有 的DependencyProperty你在WPF對象層次登記的靜態參考。它維護 一個名爲PropertyFromName的HashTable,它在內部使用它來獲取 DependencyProperty對象。換句話說,每個dependencyProperty 對象都在全局HashTable中註冊。

在Silverlight的WP7 DependencyProperties幾乎相同的全局哈希表(實際上它是

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

但通過的GetValue的SetValue的源代碼,看後方法的DependencyObject class I see that _ registeredProperties根本不使用。

有人知道爲什麼它以這種方式實現嗎?或者我錯過了什麼? 預先感謝您。

回答

1

我想你確實錯過了一些東西。 _registeredProperties字典(以及它在WPF中的任何等價物)用於通過名稱檢索依賴項屬性。它主要用於綁定機制(框架必須從{Binding Path=PropertyName}等表達式中檢索DP)。

當你在GetValueSetValue,你已經有一個參考DP(這是該方法的第一個參數)。因此,_registeredProperties在那裏沒用。 GetValueSetValue都使用另一個字典,_valueTable,類型Dictionary<DependencyProperty, EffectiveValueEntry>_valueTable是將值關聯到DP的實際集合。

+0

你是對的@KooKiz。謝謝!也許你也知道爲什麼CoreDependencyProperty的值通過本地調用存儲在某個地方,而CustomAttachedDependencyProperty和CustomDependencyProperty的值存儲在DependencyObject類的_valueTable字段中? – 2012-07-18 20:43:34

+0

不能肯定地說。這可能是因爲一些控件,比如WebBrowser,只是本地控件的包裝。所以這些控件可能更容易擁有本地依賴屬性。 – 2012-07-19 17:48:46

+0

好主意,@KooKiz,thx。 – 2012-07-22 17:08:45