2014-11-04 4 views
0

Google에서 많은 기사가 DependencyProperty는 개체의 각 인스턴스 값을 유지 관리하는 KeyValue 메커니즘을 가지고 있기 때문에 정적이라고 말했습니다.WPF DependencyProperty가 객체의 각 인스턴스를 구별하고 DependencyProperty의 값을 찾기 위해 키를 가져 오는 방법은 무엇입니까?

그러나 문제는 DependencyProperty에 대해 GetValue/SetValue를 호출하면 각 인스턴스를 식별하고 키를 생성하여 개체의 다른 인스턴스에 대한 HashTable의 값을 읽거나 저장하는 방법입니다.

예를 들어, 두 인스턴스의 TestDp를 만들고 두 인스턴스의 TestDProperty 값을 설정하면 SetValue가 각 인스턴스를 식별하고 그에 따라 해시 테이블에 DependencyProperty 값을 저장하는 방법은 무엇입니까?

GetValue & SetValue DependencyObject의 코드를 검사했지만 각 인스턴스를 구별하는 방법을 여전히 파악할 수 없습니다. this.LookupEntry (dp.GlobalIndex) 코드는 EntryIndex를 픽업하지만 GlobalIndex가 오브젝트의 각 인스턴스를 구별하기 위해 어떻게 생성되는지는 잘 모르겠습니다.

+0

귀하의 질문을 이해하지만 당신은'GetValue' /'SetValue'를'DependencyObject'의 현재 인스턴스에서 호출합니다. 또한'dpTest'는'TestDProperty'이어야하고 CLR 래퍼는'TestD'와 등록 된 프로퍼티의 이름 _ "TestD"_ – dkozl

+0

*** 당신이 이것을 할 때 두 인스턴스의 TestDProperty에 대한 값을 설정해야합니다. 물론 *** 다른 인스턴스 ***에 대한 SetValue를 호출해야하므로 별도로 데이터를 저장할 위치를 알 수 있습니다. 데이터는 *** 기본값 ***을 사용하는 경우에만 공유되며 특정 인스턴스에 대해 변경되면 더 이상 공유되지 않습니다. –

+0

DependencyObject의 GetValue 및 SetValue 코드를 확인했지만 각 인스턴스를 구별하는 방법을 여전히 파악할 수 없습니다. this.LookupEntry (dp.GlobalIndex) 코드는 EntryIndex를 픽업하지만 GlobalIndex가 오브젝트의 각 인스턴스를 구별하기 위해 어떻게 생성되는지는 잘 모르겠습니다. – mind1n

답변

1

DependencyObject의 GetValue는 GetValueEntry를 호출하고 언급 한 EntryIndex를 사용합니다. 그러나 인스턴스 정보를 기반으로 키를 생성하지는 않습니다.

+2

오른쪽에 속성이 등록 될 때 생성 된 각 DP에 대한 글로벌 인덱스 만 있습니다. 이것은 '핵심'역할을합니다. 인스턴스 특정 키가 없습니다. –