1

Internals of Dependeny Property in WPFを読んだ後、Dependeny Properties が Silverlight for WP7 でどのように実装されているのか疑問に思っています。調査には、 xda フォーラムの Reflector と Dllが使用されました。

WPF の場合:

DependencyProperty は、WPF オブジェクト階層に登録するすべての DependencyProperty の静的参照を維持します。DependencyProperty オブジェクトを取得するために内部で使用する PropertyFromName という名前の HashTable を維持します。つまり、各依存プロパティ オブジェクトはグローバル HashTable に登録されます。

Silverlight for WP7 では、DependencyProperties にほぼ同じグローバル HashTable があります (実際には

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

)

しかし、 DependencyObjectクラスのGetValueメソッドとSetValueメソッドのソース コードを調べたところ、_ registeredPropertiesがまったく使用されていないことがわかりました。

なぜそのような方法で実装されているのか誰にも分かりますか? それとも、私は何かを逃したのでしょうか?前もって感謝します。

4

1 に答える 1

2

本当に何かが足りないと思います。_registeredPropertiesディクショナリ (および WPF にある同等のディクショナリ) は、依存関係プロパティをその名前で取得するために使用されます。これは主にバインディング メカニズム (フレームワークが のような式から DP を取得する必要がある場合{Binding Path=PropertyName}) に使用されます。

GetValueまたはにいるときはSetValue、既に DP への参照があります (これはメソッドの最初のパラメーターです)。したがって、そこで_registeredPropertiesは役に立たない。両方ともタイプ の別のディクショナリ を使用しGetValueます。値を DP に関連付ける実際のコレクションです。SetValue_valueTableDictionary<DependencyProperty, EffectiveValueEntry>_valueTable

于 2012-07-18T17:43:40.330 に答える