2008-08-31 15 views
3

Lernen WPF heutzutage. Heute haben Sie mit .NET-Abhängigkeitseigenschaften etwas Neues gefunden. Was sie an den Tisch bringen istWarum .Net WPF DependencyProperties müssen statische Mitglieder der Klasse sein

  • Unterstützung für Rückrufe (Validierung, Veränderung, etc)
  • Property Erbe
  • Befestigt Eigenschaften

unter anderem.

Aber meine Frage hier ist, warum sie in der enthaltenen Klasse als statisch deklariert werden müssen? Der empfohlene Weg besteht darin, die Eigenschaft 'Wrapper' für die Instanz hinzuzufügen. Warum ?

bearbeiten: @Matt, aber nicht das auch Mandat, dass der Wert der Eigenschaft auch über Instanzen geteilt wird - es sei denn, es ist natürlich ein abgeleiteter Wert?

Antwort

2

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

  1. Sie nicht denselben DP zweimal registrieren. Um diese Einschränkung zu erfüllen, sollten Sie eine statische Variable verwenden, die nur einmal initialisiert wird, sodass Sie DP nur einmal registrieren.
  2. DP sollte vor jeder Klasse registriert werden (was nutzt die DB) Instanz erstellt
5

Ich denke, der Grund, warum Sie die statische Instanz einer Abhängigkeitseigenschaft benötigen, ist eigentlich nur, weil das ist, wie sie entworfen wurden. Das statische Bit enthält alle Eigenschaftsmetadaten - ihren Standardwert, ihren Eigentümertyp (praktisch, wenn es sich um eine angefügte Eigenschaft handelt) usw., ihre Rückrufmethoden, wenn sie sich ändern - so etwas. Es ist sinnvoll, diese Objekte statisch in allen Instanzen der Klasse und nicht pro Instanz zu speichern.

7

Abhängigkeitseigenschaften sind aufgrund einer Schlüsseloptimierung in WPF statisch: Viele der Steuerelemente in WPF haben Dutzende, wenn nicht Hunderte von Eigenschaften. Die meisten Eigenschaften in diesen Klassen sind auf ihren Standardwert festgelegt. Wenn DPs Instanzeigenschaften wären, müsste Speicher für jede Eigenschaft in jedem von Ihnen erstellten Objekt zugewiesen werden. Da DPs statisch sind, kann WPF die Speicherbelegung jeder Eigenschaft effektiver verwalten. Der Grund, warum Sie für alle von Ihnen registrierten DP einen Standardwert angeben sollten, ist, dass WPF darauf achtet, keinen zusätzlichen Speicher für Ihre Eigenschaft zuzuweisen, wenn dieser auf den Standardwert gesetzt wird, unabhängig davon, wie viele Objekte diese Eigenschaft enthalten .

Verwandte Themen