Frage Was nutzt eine DependencyProperty, deren ownerType kein DependencyObject ist?


Ich habe gerade angefangen, mit DependencyProperties in WPF zu spielen, und ich wollte ein paar Gedanken überprüfen, während ich mich mit ihnen beschäftige.

Folgendes gegeben (und die Namenskonvention für jetzt ignorierend):

class MyTestClass
{
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}

Ich finde, dass dp2 eine TypeInitializationException mit der Nachricht "'MyTestClass' Typ muss von DependencyObject" abgeleitet werden, was ich erwartet habe, aber dp1 wird ziemlich glücklich akzeptiert.

Jetzt verstehe ich, warum DP2 eine Ausnahme auslöst, während ich versuche, Eigenschaftsmetadaten auf einem Typ zu registrieren, der kein DependencyObject ist, und das ist in Ordnung. Ich habe unter die Abdeckungen geschaut und kann den Codeweg sehen, den dp1 und dp2 folgen, also verstehe ich aus einer Codeperspektive, warum dp1 die Ausnahme nicht aufwirft, aber konzeptionell hätte ich erwartet, dass sowohl dp1 als auch dp2 die gleiche Ausnahme auslösen.

Meine Frage ist, welche Verwendung gibt es beim Erstellen einer DependencyProperty wie dp1, deren ownerType kein DependencyObject ist, da ich nicht sehen kann, wie es ohne die Methoden GetValue / SetValue für ein DependencyObject verwendet werden kann.


7
2018-02-25 09:48


Ursprung


Antworten:


Bearbeiten
Der Grund für die erste Register-Signatur ist die Registrierung eines DependencyProperty Das hat keinen Standardwert, der von der. wiederhergestellt werden könnte Clear-Methode und hat auch keinen registrierten Callback für die Wertänderung.

Da kein Standardwert vorhanden ist, wird nicht überprüft, ob der Standardwert gültig ist und daher Ihre Ausnahme nicht ausgelöst wird. Eine solche Registrierung ist jedoch nicht möglich. Sie werden davon keinen Nutzen haben und die Tatsache, dass es keine Ausnahme gibt, bedeutet nicht, dass es für etwas gut ist - es ist nur nicht falsch.


3
2018-02-25 09:57