종속성 속성이란 무엇입니까?


답변:


94

의존성 속성은 DependencyObject에서 파생되는 클래스의 속성이며, 단순히 백업 필드를 사용하여 값을 저장하는 것이 아니라 DependencyObject에서 도우미 메서드를 사용한다는 점에서 특별합니다.

그들에 대한 가장 좋은 점은 데이터 바인딩에 대한 모든 배관이 내장되어 있다는 것입니다. 무언가를 바인딩하면 변경 될 때 알려줍니다.


36
그것은 여전히 ​​의존 속성이 무엇을 할 수 있는지, 왜 존재하는지에 대해 거의 알려주지 않습니다. 가장 중요한 속성, 요소 트리의 가치 확인에 대해서는 언급하지 않았습니다.
ProfK

안녕하십니까 @MattHamilton 귀하의 답변에 감사드립니다-그러나 "그들은 DependencyObject에서 일부 도우미 메소드를 사용합니다"는 무슨 뜻입니까?
BKSpurgeon

2
@BKSpurgeon DependencyObject에는 "SetValue"및 "GetValue"와 같은 일부 메서드가 있는데,이 필드는 지원 필드를 사용하지 않고 종속성 속성의 값을 저장 / 읽기 위해 호출합니다.
매트 해밀턴

91

도움이되고 잘 작성된 것으로 밝혀진 유일한 설명은 다음과 같습니다. http://www.wpftutorial.net/dependencyproperties.html

기본적으로 DependencyProperties는 클래스의 필드에 대한 setter / getter가 아니라 런타임 중에 실제 값을 동적으로 검색한다는 점에서 일반 속성과 다릅니다. SetValue()DP 의 방법은 매우 간단하며 속성의 로컬 값을 사용자가 제공 한 값으로 설정합니다. 그러나 GetValue()DependencyProperty에서 시도 할 때 먼저 로컬 값을 찾고, 존재하지 않는 경우 (일반 속성과 달리 DependencyProperties에서 실행 가능) 해당 값을 찾을 때까지 논리 UI 트리를 계속 진행합니다. 프레임 워크가 로컬 값을 찾지 않고 트리의 맨 위에 도달하면 미리 정의 된 기본값을 속성 값으로 사용합니다.

이 방법을 통해 DependencyProperties는 사용자가 명시 적으로 설정 한 값만 로컬에 저장되므로 일반 속성보다 적은 메모리를 사용합니다.

또한 위에서 언급 한 것처럼 DependencyProperties를 사용하면 XAML 코드에서 바인딩하고 일반 속성에서는 허용되지 않는 트리거를 설정할 수 있습니다.

나는 막연함의 일부를 정리했으면 좋겠다 :)


2
그리고 "부착 된 재산"은 무엇입니까?
Paul-Sebastian Manole

12
첨부 된 속성은 선언중인 현재 항목에 속하지 않지만 다른 개체에 영향을주는 속성입니다. 예를 들어 : Grid.Row="1"에서 on은 Button행의 행 번호 Grid가 0이기 때문에 부모의 행 # 2에 설정 되지만 RowDependencyProperty는 Grid객체에 속합니다 .
조나단 페리

2
당신이 말했을 때 DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowedXAML의 바인딩과 트리거 설정 또는 트리거 설정이 모두 허용되지 않는다는 의미입니까? 후속 조치를 취하고 더 명확하게 해주셔서 감사합니다!
Paul-Sebastian Manole

@ Paul-SebastianManole DataTriggers는 일반 속성에서도 작동합니다. Value값이 0 인 속성 (DP가 아님) Value이 있고 1로 변경 될 때 뷰가 무언가를 원한다고 가정 해 봅시다 DataTrigger.Binding={Binding Path=Value, Value=1}
Jonathan Perry

36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ 는 WF 및 WPF의 맥락에서 종속성 속성에 대한 좋은 설명을 제공합니다.

발췌 :

요점 – 종속성 속성 값이 해결되었습니다.

모든 속성과 마찬가지로 종속성 속성의 최종 목표는 상태를 관리하는 것입니다. 그러나 일반 .Net 속성과 달리 로컬 속성 값은 인스턴스 변수에 저장되지 않습니다.

대신 종속성 속성이 종속성 속성 프레임 워크에 등록되고 기본 속성 값이 확인됩니다. 즉, 값은 속성 등록에 의해 정의 된 규칙에 따라 종속성 속성 프레임 워크에 의해 결정됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.