Frage Was ist eine Abhängigkeitseigenschaft?


Was ist eine Abhängigkeitseigenschaft in .Net (insbesondere im WPF-Kontext). Was ist der Unterschied zur regulären Immobilie?


124
2018-03-06 00:31


Ursprung


Antworten:


Abhängigkeitseigenschaften sind Eigenschaften von Klassen, die von DependencyObject abgeleitet sind, und sie sind insofern etwas Besonderes, als dass sie einfach ein Unterstützungsfeld verwenden, um ihren Wert zu speichern. Sie verwenden einige Hilfsmethoden für DependencyObject.

Das Schönste an ihnen ist, dass sie über alle erforderlichen Installationen für die Datenbindung verfügen. Wenn Sie etwas an sie binden, werden sie benachrichtigt, wenn sie sich ändern.


88
2018-03-06 00:43



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 dahingehend, dass sie nicht nur für die Felder in der Klasse Setter / Getter sind, sondern ihre tatsächlichen Werte zur Laufzeit dynamisch abrufen. Das SetValue() Methode von DPs ist ziemlich einfach und legt den lokalen Wert der Eigenschaft auf den Wert fest, den Sie ihm gaben. Allerdings, wenn Sie es versuchen GetValue() Von einer DependencyProperty wird zuerst nach einem lokalen Wert gesucht. Wenn keiner vorhanden ist (was in DependencyProperties im Gegensatz zu regulären Eigenschaften möglich ist), wird die logische UI-Struktur fortgesetzt, bis ein solcher Wert gefunden wird. Wenn das Framework den Anfang der Struktur erreicht hat, ohne lokale Werte zu finden, verwendet es einen vordefinierten Standardwert als Wert der Eigenschaft.

Diese Methode ermöglicht DependencyProperties, weniger Speicher als normale Eigenschaften zu verwenden, da nur Werte, die explizit vom Benutzer festgelegt wurden, lokal gespeichert werden.

Und, wie oben erwähnt, ermöglichen DependencyProperties auch, dass wir sie im XAML-Code binden und Trigger für sie festlegen, was bei normalen Eigenschaften nicht erlaubt ist.

Ich hoffe, ich habe es geschafft, einige der Unklarheiten zu beseitigen :)


82
2017-10-16 16:02



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

Ein Ausschnitt:

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

Das ultimative Ziel einer Abhängigkeitseigenschaft ist, wie jede 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 im Rahmen der Abhängigkeitseigenschaft registriert, und der zugrunde liegende Eigenschaftswert wird aufgelöst. Dies bedeutet, dass der Wert vom Abhängigkeitseigenschafts-Framework basierend auf Regeln bestimmt wird, die durch die Eigenschaftsregistrierung definiert werden.


35
2018-03-06 00:40



Erklärung ohne Code über Analogie (~ 5 min)

Denken Sie darüber nach:

Jeder ist mehr oder weniger gleich

Menschen haben eine Menge Informationen mit ihnen verbunden. Unzählige Hunderte und Tausende von Daten sind mit Ihnen verbunden -

  • wie viele Finger hast du,

  • wie viele Zehen,

  • Wie viele BRCA2 Gene haben Sie usw

Welches Problem wollen wir lösen?

Wir wollen in der Lage sein, Menschen, die uns nach uns fragen, klare Antworten zu geben.

  • Speicherabdruck minimieren

Die Frage ist also: Wie können Sie sich an all das erinnern? Nun, ursprünglich begannen die Leute, all diese Dinge niederzuschreiben, aber bald wurde ihnen klar, dass sie etwa 10 Bände der Gelben Seiten - im Grunde genommen die gesamte Bibliothek von Alexandria (in gedruckter Form) in ihrer Gesäßtasche - tragen mussten beantworte all diese Fragen: das ist waaaay zu viel Zeug, um herumzujagen.

Lösung: Speichern Sie allgemeine Informationen an einem Ort

Also hatte jemand eine gute Idee. Sie haben bemerkt, dass die Information die meiste Zeit die selbe ist. z.B. Die meisten Leute haben:

  • ein Herz

  • ein Gesicht usw.

  • drei BRCA2-Gene

Es ist nicht nötig, dass jede einzelne Person 30 Pfund Papier in der Gesäßtasche trägt. Sie können alle diese Informationen speichern ein Platzin einem eine zentrale Bibliothek. Die Leute könnten frei herumlaufen, ohne durch diese Informationen belastet zu sein.

Aber es gibt immer Ausnahmen ... nicht jeder hat die gleiche Blutgruppe oder die gleiche Anzahl von Haarfollikeln auf dem Kopf. Wenn es Unterschiede oder Ausnahmen von der Norm gibt, dann trägst du einfach diese Ausnahmen mit dir in deiner hinteren Tasche, anstatt ein ganzes Bücherregal im Wert von Büchern. Denken Sie daran, dass die Menschen größtenteils dieselben sind - sie teilen die gleichen Werte und das ändert sich selten. Wenn Sie keine Ausnahmen in Ihrer Hosentasche haben, können Sie den Interviewer einfach auf die im gemeinsamen Repository gespeicherten Daten verweisen.

Beispiel: Reporter interviewt Präsident Donald Trump **

Versuchen wir es mit einem Beispiel.

Wir haben eine Instanz von Person: Donald Trump. Ein Nachrichtenreporter stellt unserem geschätzten Präsidenten einige Fragen:

"Herr Präsident Trump, wie viele HIF1A-Gene haben Sie?"

Donald überprüft seine Gesäßtasche. Dort ist nichts darüber aufgelistet, wie viele Gene er hat. Er sagt dem Reporter einfach, dass er die Standardnummer hat, die alle anderen haben. "Wie alle anderen", sagt Trump. "Sie können Ihre Antwort in der Bibliothek finden". Also geht der Reporter einfach in die Bibliothek, um sich über dieses spezielle Detail zu informieren.

"Herr Präsident Trump, wie viele Gesichter haben Sie?

Kann dieser Wert lokal aufgelöst werden? Wenn es Trump ist, kann er einfach den Wert zurückschreiben, der in seiner hinteren Tasche steht - aber wenn dort nichts geschrieben wird, kann Trump den Reporter einfach anweisen, in die örtliche Bibliothek zu gehen, um diese Information zu finden.

Aber es gibt einen Wert lokal niedergeschrieben! In seiner Hosentasche gibt es eine Antwort: Er hat 2 Gesichter. Das ist nicht die Norm. So kann Trump den Reporter nicht bitten, sich auf die Bibliothek zu beziehen, weil dies eine Abweichung von der Norm ist. Trump sollte sofort mit der Antwort zurückkehren: 2 (keine falschen Nachrichten).

Wertauflösung auf einen Baum

Um es zu vereinfachen, werden die Dinge zuerst mit der Person und dann aufwärts in die Bibliothek aufgelöst, und wenn die Information dort nicht enthalten ist, dann geht die Frage an eine höhere Autorität: entweder Gott oder das Spaghetti-Monster, je nachdem . Dann gehst du weiter und höher, bis du eine Antwort bekommst. Am Ende werden alle Antworten gelöst.

Ein weiteres Merkmal von Abhängigkeitseigenschaften: Antworten, die von anderen Werten abhängig sind

Das bedeutet, dass die Antwort, die Herr Prez einem Reporter gibt, der ihm eine Frage stellt, davon abhängt, was jemand anderes sagt. Zum Beispiel, wenn ein Reporter Herrn Prez fragt, ob er ein guter Präsident ist, dann könnte die gelieferte Antwort völlig davon abhängen, was seine Perücke über sich selbst sagt.

"Das können Sie mir glauben!" sagt die Perücke, "Wir werden machen, ein großartiger Präsident, der wird wieder gewinnen! Und wir werden Milliarden und Milliarden von Dollar machen."

Wenn die Perücke sagt, dass der Trompeter gewinnt, dann ist das die Antwort, die zurückgegeben wird.

Zusammenfassung

Kurz gesagt, eine Abhängigkeitseigenschaft ist eine Eigenschaft, die entweder lokal oder im UI-Baum aufgelöst wird. Der Grund dafür ist, dass UI-Elemente Hunderte und Aberhunderte von Eigenschaften haben, die Ihr Gedächtnis bald auffressen würden, wenn Sie sie als Backing-Felder für jeden einzelnen von ihnen speichern würden. Da sich die meisten dieser Felder nie oder nur sehr selten ändern, müssen sie nicht als Hintergrundfelder gespeichert werden, und ihre Werte können aufgelöst werden, indem Sie den Baum hochgehen. Zugegeben, die Analogie ist ein bisschen angespannt, aber ich hoffe, dass es hilfreich (und vor allem erinnerbar) für jemanden ist.

** Wartet noch auf die (Brand-) Wand, die Trump versprochen hat. Müssen die Spamicans draußen halten.


5
2018-06-20 10:23