종속성 속성이란 무엇입니까?
.Net (특히 WPF 컨텍스트)의 종속성 속성은 무엇입니까? 일반 부동산과의 차이점은 무엇입니까?
의존성 속성은 DependencyObject에서 파생되는 클래스의 속성이며, 단순히 백업 필드를 사용하여 값을 저장하는 것이 아니라 DependencyObject에서 도우미 메서드를 사용한다는 점에서 특별합니다.
그들에 대한 가장 좋은 점은 데이터 바인딩에 대한 모든 배관이 내장되어 있다는 것입니다. 무언가를 바인딩하면 변경 될 때 알려줍니다.
도움이되고 잘 작성된 것으로 밝혀진 유일한 설명은 다음과 같습니다. http://www.wpftutorial.net/dependencyproperties.html
기본적으로 DependencyProperties는 클래스의 필드에 대한 setter / getter가 아니라 런타임 중에 실제 값을 동적으로 검색한다는 점에서 일반 속성과 다릅니다. SetValue()
DP 의 방법은 매우 간단하며 속성의 로컬 값을 사용자가 제공 한 값으로 설정합니다. 그러나 GetValue()
DependencyProperty에서 시도 할 때 먼저 로컬 값을 찾고, 존재하지 않는 경우 (일반 속성과 달리 DependencyProperties에서 실행 가능) 해당 값을 찾을 때까지 논리 UI 트리를 계속 진행합니다. 프레임 워크가 로컬 값을 찾지 않고 트리의 맨 위에 도달하면 미리 정의 된 기본값을 속성 값으로 사용합니다.
이 방법을 통해 DependencyProperties는 사용자가 명시 적으로 설정 한 값만 로컬에 저장되므로 일반 속성보다 적은 메모리를 사용합니다.
또한 위에서 언급 한 것처럼 DependencyProperties를 사용하면 XAML 코드에서 바인딩하고 일반 속성에서는 허용되지 않는 트리거를 설정할 수 있습니다.
나는 막연함의 일부를 정리했으면 좋겠다. :)
http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ 는 WF 및 WPF의 맥락에서 종속성 속성에 대한 좋은 설명을 제공합니다.
발췌 :
요점 – 종속성 속성 값이 해결되었습니다.
모든 속성과 마찬가지로 종속성 속성의 최종 목표는 상태를 관리하는 것입니다. 그러나 일반 .Net 속성과 달리 로컬 속성 값은 인스턴스 변수에 저장되지 않습니다.
대신 종속성 속성이 종속성 속성 프레임 워크에 등록되고 기본 속성 값이 확인됩니다. 즉, 속성 등록에 의해 정의 된 규칙에 따라 값이 종속성 속성 프레임 워크에 의해 결정됩니다.
유추를 통한 코드없는 설명 (~ 5 분)
이야기가 마음에 들지 않으면 자신을 구하십시오 (~ 5 분)
몇 가지 개념을 살펴 봐야합니다.
- 나무 / 재산 가치 상속 및
- 다중 제공자 지원
- 변경 알림
(a) 가치 해결 / 재산 가치 상속
인간 유전자의 예를 사용하여 개념을 설명합시다.
모두가 다소 동일합니다
인간은 그들과 관련된 많은 정보를 가지고 있습니다. 수백, 수천의 데이터가 당신과 관련이 있습니다 –
손가락이 몇 개인 지
발가락이 몇 개인 지
얼마나 많은 BRCA2 유전자가 있는지 등
우리가 해결하려는 문제는 무엇입니까?
우리는 모든 정보를 다루지 않고 우리 자신에 대해 질문하는 사람들에게 정답을 줄 수 있기를 원합니다.
그래서 질문은 : 어떻게 당신은 모든 것을 기억할 수 있습니까? 글쎄, 원래 사람들은이 모든 것을 작성하기 시작했지만 곧 10 권 정도의 옐로우 페이지를 가져야한다는 것을 깨달았습니다. 기본적으로 알렉산드리아 (하드 카피 형식)의 전체 라이브러리를 뒷주머니에 담을 수 있습니다. 그 모든 질문에 대답하십시오.
솔루션 : 공통 정보를 한 곳에 저장
그래서 누군가는 밝은 생각을 가지고있었습니다. 그들은 대부분 정보가 동일하다는 것을 알았습니다. 예를 들어 대부분의 사람들은
하나의 마음
한 얼굴 등
3 개의 BRCA2 유전자
모든 사람이 뒷주머니에 약 30 파운드의 종이를 가지고 다닐 필요는 없습니다. 모든 정보를 한 곳 에서 하나의 중앙 라이브러리에 저장할 수 있습니다 . 사람들은 그 정보를 가지고 다니면서 부담없이 자유롭게 걸을 수있었습니다.
그러나 항상 예외가 있습니다 .... 모든 사람이 혈액형이 같거나 머리에 같은 수의 모낭이있는 것은 아닙니다. 규범과 다른 점이나 예외가있는 경우, 책 선반 전체에 해당하는 책이 아닌 백 포켓 (예 : 사전)에 이러한 예외 사항을 가지고 다니면됩니다. 대부분의 경우 사람들은 거의 동일하다는 것을 기억하십시오. 그들은 같은 가치를 공유하며 이것은 거의 변하지 않습니다. 백 포켓에 예외를 기록하지 않은 경우 인터뷰자를 공통 리포지토리에 저장된 데이터를 참조하면됩니다.
예 : 기자가 도널드 트럼프 대통령과의 인터뷰 **
예를 들어 이것을 시도해 봅시다.
Person : Donald Trump의 사례가 있습니다. 한 기자가 존경하는 대통령에게 몇 가지 질문을합니다.
“트럼프 대통령, HIF1A 유전자는 몇 개입니까?”
돈은 뒷주머니를 확인합니다. 그가 가지고있는 유전자의 수에 대해서는 아무것도 기록되어 있지 않습니다. 그래서 그는 단순히 다른 사람들이 가지고있는 기본 번호를 가지고 있다고 기자에게 알려줍니다. 트럼프는“다른 사람들과 동일하다. "도서관에서 답을 찾을 수 있습니다". 기자는 도서관에 가서 특정 세부 사항을 알아냅니다.
“트럼프 대통령, 당신은 얼마나 많은 얼굴을 가지고 있습니까?
이 값을 로컬로 해결할 수 있습니까? 이 값은 Trumps의 백 포켓에 답이 있기 때문에 로컬에서 해결되는 것처럼 보입니다. 2-즉시 기자에게 반환됩니다.
나무의 가치 해결
In reality, things are a little more complicated than an answer either being in the back pocket, or otherwise being held in a central library. There are many intermediatory places which could store the same information and thus, would be ideal candidates to "resolve the property's value". So things might start in the back pocket, then the reporter might have to check a whole bunch of intermediatory places, in ascending order, in order to get the answer. e.g. the reporter might start with other newspapers, then court documents, and failing all of that, if no answer is found, then the answer is the default value contained in the central library.
To simplify it, things are resolved first with the person, and then upwards higher and higher authorities: eventually ending up with either God or the Spaghetti monster as the case may be. In then end, you keep going higher and higher till you get an answer. In the end, all answers get resolved.
Summary
In short, a dependency property is a property that gets resolved either locally or up the UI tree as the case may be. The reason we do this is because UI elements have hundreds and hundreds of properties that would soon eat up your memory if you were to store them as backing fields for each and every single one of them. Because most of these fields never or very rarely change, there is no need to store them as backing fields, and their values can be resolved by going up the tree.
Lastly, you get automatic change notification built in for free.
Granted, the analogy is a bit strained, but I hope it is helpful.
**Still waiting on the (fire) wall Trump promised. Need to keep the Spamicans out.
참고URL : https://stackoverflow.com/questions/617312/what-is-a-dependency-property
'programing tip' 카테고리의 다른 글
오류와 예외의 차이점은 무엇입니까? (0) | 2020.07.02 |
---|---|
Math.random () 설명 (0) | 2020.07.02 |
왜 (0-6)이 -6 = False입니까? (0) | 2020.07.02 |
포트는 IPv6에서 어떻게 작동합니까? (0) | 2020.07.02 |
"배치"란 무엇이며 GO가 사용되는 이유는 무엇입니까? (0) | 2020.07.01 |