142 Stimmen

Was ist eine Abhängigkeitseigenschaft?

Was ist eine Abhängigkeitseigenschaft in .Net (insbesondere im WPF-Kontext). Was ist der Unterschied zu einer normalen Eigenschaft?

101voto

Jonathan Perry Punkte 2783

Die einzige Erklärung, die ich hilfreich und gut geschrieben fand, ist diese hier: http://www.wpftutorial.net/dependencyproperties.html

Grundsätzlich unterscheiden sich DependencyProperties von normalen Eigenschaften dadurch, dass sie nicht nur Setter/Getter für Felder in der Klasse sind, sondern ihre tatsächlichen Werte dynamisch zur Laufzeit abrufen. Die SetValue() Methode von DPs ist ziemlich einfach und setzt den lokalen Wert der Eigenschaft auf den Wert, den Sie ihr gegeben haben. Wenn Sie jedoch versuchen, die GetValue() von einer DependencyProperty, sucht es zuerst nach einem lokalen Wert, wenn keiner vorhanden ist (was bei DependencyProperties im Gegensatz zu regulären Eigenschaften möglich ist), geht es im logischen UI-Baum weiter nach oben, bis es einen solchen Wert findet. Wenn das Framework die Spitze des Baums erreicht hat, ohne einen lokalen Wert zu finden, wird ein vordefinierter Standardwert als Wert der Eigenschaft verwendet.

Mit dieser Methode verbrauchen DependencyProperties weniger Speicher als normale Eigenschaften, da nur Werte, die vom Benutzer explizit festgelegt wurden, lokal gespeichert werden.

Und, wie bereits erwähnt, ermöglichen DependencyProperties auch die Bindung an sie im XAML-Code und das Festlegen von Auslösern für sie, was bei normalen Eigenschaften nicht zulässig ist.

Ich hoffe, ich konnte einige der Unklarheiten beseitigen :)

2 Stimmen

Und was ist ein "angeschlossenes Grundstück"?

16 Stimmen

Eine angehängte Eigenschaft ist eine Eigenschaft, die nicht zu dem aktuell deklarierten Element gehört, sondern ein anderes Objekt betrifft. Zum Beispiel: Grid.Row="1" in einem Button wird sie in Zeile 2 der übergeordneten Tabelle gesetzt Grid (aufgrund der Tatsache, dass die Zeilen auf Null basieren), aber die Row DependencyProperty gehört zu den Grid Objekt.

2 Stimmen

Als Sie sagten DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed Meinten Sie, dass sowohl das Binden in XAML als auch das Setzen von Triggern oder nur das Setzen von Triggern nicht erlaubt ist. Vielen Dank für das Follow-up und helfen, die Dinge klarer zu machen!

92voto

Matt Hamilton Punkte 193704

Abhängigkeitseigenschaften sind Eigenschaften von Klassen, die von DependencyObject abgeleitet sind, und sie sind insofern besonders, als dass sie nicht einfach ein Hintergrundfeld verwenden, um ihren Wert zu speichern, sondern einige Hilfsmethoden auf DependencyObject verwenden.

Das Schönste an ihnen ist, dass sie die gesamte Infrastruktur für die Datenbindung integriert haben. Wenn Sie etwas an sie binden, werden sie es benachrichtigen, wenn sie sich ändern.

45 Stimmen

Das sagt mir immer noch sehr wenig darüber, was eine Abhängigkeitseigenschaft tun kann oder warum sie existiert. Sie erwähnen nichts von ihrer wertvollsten Eigenschaft, der Wertauflösung im Elementbaum.

1 Stimmen

Hallo @MattHamilton danke für Ihre Antwort - aber was meinen Sie mit "Sie verwenden einige Hilfsmethoden auf DependencyObject"?

2 Stimmen

@BKSpurgeon DependencyObject hat einige Methoden wie "SetValue" und "GetValue", die Sie aufrufen, um den Wert einer Abhängigkeitseigenschaft zu speichern/auszulesen, anstatt ein Stützfeld zu verwenden.

37voto

Ash M Punkte 1375

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ bietet eine gute Erklärung der Abhängigkeitseigenschaften sowohl im Kontext von WF als auch von WPF.

Ein Auszug:

Schlüsselpunkt - Der Wert von Abhängigkeitseigenschaften wird aufgelöst

Das Ziel einer Abhängigkeitseigenschaft ist, wie bei jeder Eigenschaft, die Verwaltung des Zustands. Im Gegensatz zu normalen .Net-Eigenschaften wird der lokale Eigenschaftswert jedoch nicht in einer Instanzvariablen gespeichert.

Stattdessen werden Abhängigkeitseigenschaften bei dem Abhängigkeits-Eigenschaftsframework registriert, und der zugrunde liegende Eigenschaftswert wird aufgelöst - das heißt, der Wert wird vom Abhängigkeits-Eigenschaftsframework auf der Grundlage von Regeln bestimmt, die durch die Eigenschaftsregistrierung definiert wurden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X