Warum müssen .Net WPF DependencyProperties statische Mitglieder der Klasse sein?

StackOverflow https://stackoverflow.com/questions/36682

  •  09-06-2019
  •  | 
  •  

Frage

Heutzutage WPF lernen.Heute etwas Neues mit .Net-Abhängigkeitseigenschaften gefunden.Was sie auf den Tisch bringen, ist

  • Unterstützung für Rückrufe (Validierung, Änderung usw.)
  • Eigentumsvererbung
  • Angehängte Eigenschaften

unter anderen.

Aber meine Frage hier ist, warum sie in der enthaltenden Klasse als statisch deklariert werden müssen.Die empfohlene Vorgehensweise besteht darin, ihnen dann die Instanzeigenschaft „wrapper“ hinzuzufügen.Warum ?

bearbeiten:@Matt, aber erfordert das nicht auch, dass der Eigenschaftswert auch von allen Instanzen gemeinsam genutzt wird – es sei denn natürlich, es handelt sich um einen abgeleiteten Wert?

War es hilfreich?

Lösung

Ich sehe zwei Gründe für diese Anforderung:

  1. Sie können denselben DP nicht zweimal registrieren.Um diese Einschränkung einzuhalten, sollten Sie eine statische Variable verwenden. Sie wird nur einmal initialisiert, sodass Sie DP nur einmal registrieren.
  2. DP sollte vor der Erstellung einer Klasseninstanz (die diese Datenbank verwendet) registriert werden

Andere Tipps

Abhängigkeitseigenschaften sind aufgrund einer wichtigen Optimierung in WPF statisch:Viele der Steuerelemente in WPF verfügen über Dutzende, wenn nicht Hunderte von Eigenschaften.Die meisten Eigenschaften in diesen Klassen sind auf ihren Standardwert festgelegt.Wenn DPs Instanzeigenschaften wären, müsste für jede Eigenschaft in jedem von Ihnen erstellten Objekt Speicher zugewiesen werden.Da DPs statisch sind, kann WPF die Speichernutzung jeder Eigenschaft effektiver verwalten.

Der Grund, warum Sie für jeden von Ihnen registrierten DP einen Standardwert angeben sollten, liegt darin, dass WPF darauf achtet, Ihrer Eigenschaft keinen zusätzlichen Speicher zuzuweisen, wenn sie auf den Standardwert gesetzt ist, unabhängig davon, wie viele Objekte Sie erstellen, die diese Eigenschaft enthalten.

Ich denke, der Grund, warum Sie die statische Instanz einer Abhängigkeitseigenschaft benötigen, liegt eigentlich darin, dass sie so entworfen wurden.Das statische Bit enthält alle Metadaten der Eigenschaft – ihren Standardwert, ihren Eigentümertyp (praktisch, wenn es sich um eine angehängte Eigenschaft handelt) usw., ihre Rückrufmethoden für den Fall, dass sie sich ändert – und so weiter.Es ist sinnvoll, diese Dinge statisch über alle Instanzen der Klasse hinweg und nicht pro Instanz zu speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top