2012-07-18 8 views
1

Internals of Dependeny Property in WPF을 읽은 후 Dependeny Properties가 WP7 용 Silverlight에서 어떻게 구현되는지 궁금합니다. 조사를 위해 xda forum에서 리플렉터 및 Dll을 사용했습니다. WPF에서WP7의 의존성 속성 내부 구조

:

은 DependencyProperty는 WPF 객체 계층 구조에 등록 된 모든 하는 DependencyProperty의 정적 참조를 유지합니다. 내부적으로 DependencyProperty 개체를 가져 오기 위해 사용하는 PropertyFromName이라는 HashTable을 유지 관리합니다. 즉, 각 dependencyProperty 개체는 전역 HashTable에 등록됩니다. WP7의 DependencyProperties에 대한

실버 라이트에서

(실제로는

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

입니다)하지만 거의 같은 글로벌 해시를 가지고있는 GetValueSetValue를의 소스 코드를 찾고 후 방법 종속성 개체 클래스 나는 그것을 볼 수 있습니다 _ registeredProperties은 전혀 사용되지 않습니다.

왜 그런 식으로 구현 된 사람이 있습니까? 아니면 내가 놓친 것일까 요? 미리 감사드립니다.

답변

1

실례합니다. _registeredProperties 사전 (및 WPF에있는 동등한 것)은 이름으로 종속성 속성을 검색하는 데 사용됩니다. 주로 프레임 워크가 {Binding Path=PropertyName}과 같은 표현식에서 DP를 검색해야하는 바인딩 메커니즘에 사용됩니다.

GetValue 또는 SetValue에 들어갔을 때 이미 DP에 대한 참조가 있습니다 (메서드의 첫 번째 매개 변수입니다). 따라서 _registeredProperties은 쓸모가 없습니다. GetValueSetValue은 의 다른 사전 _valueTable을 사용합니다. _valueTable은 DP에 값을 연결하는 실제 모음입니다.

+0

당신이 맞습니다, @KooKiz. 감사! CustomAttachedDependencyProperty 및 CustomDependencyProperty 값이 DependencyObject 클래스의 _valueTable 필드에 저장되는 동안 CoreDependencyProperty의 값이 네이티브 호출을 사용하여 어딘가에 저장되는 이유를 알고있을 것입니다. –

+0

확실하게 말할 수 없습니다. 아마도 WebBrowser와 같은 일부 컨트롤은 네이티브 컨트롤에 대한 래퍼 일뿐입니다. 따라서 이러한 컨트롤에 네이티브 종속성 속성이있는 것이 더 쉽습니다. –

+0

좋은 생각, @KooKiz, thx. –