Co to jest właściwość zależności?

Odpowiedzi:

94

Właściwości zależności są właściwościami klas, które pochodzą od DependencyObject i są wyjątkowe w tym, że zamiast po prostu używać pola zapasowego do przechowywania ich wartości, używają niektórych metod pomocniczych w DependencyObject.

Najfajniejsze w nich jest to, że mają wbudowaną instalację do powiązania danych. Jeśli coś z nimi powiążesz, powiadomią o tym, gdy się zmienią.

Matt Hamilton
źródło
36
To wciąż niewiele mówi mi o tym, co może zrobić właściwość zależności ani dlaczego istnieje. Nie wspominasz o ich najcenniejszej właściwości, rozwiązaniu wartości w górę drzewa elementów.
ProfK
cześć @MattHamilton, dziękuję za odpowiedź - ale co masz na myśli, mówiąc „używają metod pomocniczych w DependencyObject.”?
BKSpurgeon
2
@BKSpurgeon DependencyObject ma kilka metod, takich jak „SetValue” i „GetValue”, które wywołujesz, aby zapisać / odczytać wartość właściwości zależności, zamiast używać pola zapasowego.
Matt Hamilton,
91

Jedyne wyjaśnienie, które uznałem za pomocne i dobrze napisane, to to: http://www.wpftutorial.net/dependencyproperties.html

Zasadniczo właściwości DependencyProperties różnią się od zwykłych właściwości tym, że nie są tylko ustawieniami / pobierającymi wartości pól w klasie, ale pobierają rzeczywiste wartości dynamicznie w czasie wykonywania. PlikSetValue()Metoda PRR jest dość prosta i ustawia lokalną wartość nieruchomości do wartości Ci go dał. Jednak gdy spróbujesz GetValue()z DependencyProperty, najpierw szuka wartości lokalnej, jeśli nie ma jej (co jest możliwe w DependencyProperties w przeciwieństwie do zwykłych właściwości), będzie kontynuowała logiczne drzewo interfejsu użytkownika, dopóki nie znajdzie takiej wartości. Jeśli struktura osiągnęła szczyt drzewa bez znalezienia żadnych wartości lokalnych, użyje wstępnie zdefiniowanej wartości domyślnej jako wartości właściwości.

Ta metoda pozwala DependencyProperties zużywać mniej pamięci niż zwykłe właściwości, ponieważ tylko wartości, które zostały jawnie ustawione przez użytkownika, będą przechowywane lokalnie.

Jak wspomniano powyżej, DependencyProperties pozwalają nam również powiązać się z nimi w kodzie XAML i ustawić dla nich wyzwalacze, co w przypadku zwykłych właściwości jest niedozwolone.

Mam nadzieję, że udało mi się wyjaśnić część niejasności :)

Jonathan Perry
źródło
2
A co to jest „nieruchomość przyłączona”?
Paul-Sebastian Manole,
12
Załączona właściwość to właściwość, która nie należy do aktualnie deklarowanego elementu, ale ma wpływ na inny obiekt. Na przykład: Grid.Row="1"na a Buttonustawi go na wiersz nr 2 w obiekcie nadrzędnym Grid(ze względu na fakt, że wiersze są liczone od zera), ale RowDependencyProperty należy do Gridobiektu.
Jonathan Perry,
2
Kiedy powiedziałeś DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed, czy chodziło Ci o wiązanie w języku XAML i ustawianie wyzwalaczy, czy po prostu ustawianie wyzwalaczy nie jest dozwolone. Dziękuję za dalsze działania i pomoc w wyjaśnieniu sprawy!
Paul-Sebastian Manole
@ Paul-SebastianManole DataTriggers działa również na zwykłych właściwościach. Załóżmy, że masz Valuewłaściwość (Nie DP) o wartości 0 i chcesz, aby Twój widok robił coś po Valuezmianie na 1. Będziesz mógł to zrobić używając DataTriggeri ustawiającBinding={Binding Path=Value, Value=1}
Jonathan Perry
36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ zapewnia dobre wyjaśnienie właściwości zależności zarówno w kontekście WF, jak i WPF.

Fragment:

Kluczowy punkt - rozwiązano wartość właściwości zależności

Ostatecznym celem właściwości zależności, jak każdej innej właściwości, jest zarządzanie stanem. Jednak w przeciwieństwie do zwykłych właściwości .Net, lokalna wartość właściwości nie jest przechowywana w zmiennej instancji.

Zamiast tego właściwości zależności są rejestrowane w strukturze właściwości zależności, a podstawowa wartość właściwości jest rozpoznawana - co oznacza, że ​​wartość jest określana przez strukturę właściwości zależności na podstawie reguł zdefiniowanych przez rejestrację właściwości.

Ash M
źródło