Was ist eine Abhängigkeitseigenschaft in .Net (insbesondere im WPF-Kontext)? Was ist der Unterschied zum regulären Eigentum?
136
Was ist eine Abhängigkeitseigenschaft in .Net (insbesondere im WPF-Kontext)? Was ist der Unterschied zum regulären Eigentum?
Abhängigkeitseigenschaften sind Eigenschaften von Klassen, die von DependencyObject abgeleitet sind, und sie sind insofern besonders, als sie nicht nur ein Hintergrundfeld zum Speichern ihres Werts verwenden, sondern einige Hilfsmethoden für DependencyObject verwenden.
Das Schönste an ihnen ist, dass sie alle Installationen für die Datenbindung eingebaut haben. Wenn Sie etwas an sie binden, werden sie es benachrichtigen, wenn sie sich ändern.
Die einzige Erklärung, die ich hilfreich und gut geschrieben fand, ist diese: http://www.wpftutorial.net/dependencyproperties.html
Grundsätzlich unterscheiden sich DependencyProperties von regulären Eigenschaften darin, dass sie nicht nur Setter / Getter für Felder in der Klasse sind, sondern ihre tatsächlichen Werte zur Laufzeit dynamisch 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,GetValue()
von einer DependencyProperty aus einen lokalen Wert zu ermitteln, wird zunächst nach einem lokalen Wert gesucht. Wenn keiner vorhanden ist (was in DependencyProperties im Gegensatz zu regulären Eigenschaften möglich ist), wird der logische UI-Baum fortgesetzt, bis ein solcher Wert gefunden wird. Wenn das Framework den oberen Rand des Baums erreicht hat, ohne lokale Werte zu finden, wird ein vordefinierter Standardwert als Wert für die Eigenschaft verwendet.Mit dieser Methode kann DependencyProperties weniger Speicher als reguläre Eigenschaften belegen, da nur Werte gespeichert werden, die vom Benutzer explizit festgelegt wurden.
Wie oben erwähnt, können wir mit DependencyProperties auch im XAML-Code an sie binden und Trigger für sie festlegen, was bei regulären Eigenschaften nicht zulässig ist.
Ich hoffe, ich habe es geschafft, etwas von der Unbestimmtheit zu beseitigen :)
quelle
Grid.Row="1"
aButton
wird festgelegt, dass es sich in Zeile 2 des übergeordneten Elements befindetGrid
(aufgrund der Tatsache, dass Zeilen auf Null basieren), aber dieRow
DependencyProperty gehört zumGrid
Objekt.DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed
, dass sowohl das Binden in XAML als auch das Setzen von Triggern oder das Setzen von Triggern nicht zulässig ist? Vielen Dank für das Follow-up und die Hilfe, um die Dinge klarer zu machen!Value
Eigenschaft (nicht DP) mit dem Wert 0 , und Sie möchten Ihre Ansicht , etwas zu tun , wennValue
Änderungen 1. hast du die Möglichkeit, dies zu tun mitDataTrigger
und Einstellung derBinding={Binding Path=Value, Value=1}
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 Ausschnitt:
quelle