Silverlight: Wie informiert, dass eine änderung in einem geerbten DependencyProperty
Habe ich eine Steuerung, die erbt von (Sie Ahnen es) Kontrollieren.
Ich möchte eine Benachrichtigung erhalten, wenn der FontSize
oder Style
Eigenschaften geändert werden. In WPF, würde ich das tun, indem Sie DependencyProperty.OverrideMetadata()
. Natürlich, nützliche Dinge wie, die haben keinen Platz in Silverlight. Also, wie könnte man diejenigen Arten von Benachrichtigungen?
InformationsquelleAutor MojoFilter | 2009-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke hier ist ein besserer Weg. Immer noch müssen, um zu sehen, die vor-und Nachteile.
Und jetzt können Sie anrufen RegisterForNotification, um dich für eine Benachrichtigung ändern einer Eigenschaft eines Elements, wie .
Siehe mein Beitrag hier auf die gleiche http://amazedsaint.blogspot.com/2009/12/silverlight-listening-to-dependency.html
Mithilfe von Silverlight 4.0 beta.
Solange wir tun müssen, um es vollständig aus dem code, ich denke, wir haben keine andere option, bis wir die DependencyPropertyDescriptor in Silverlight von MS
Ich habe auch nach diesem Ansatz, leider verliert Speicher. Meiner Erfahrung nach ist es halten wird, ein Verweis auf was auch immer element, das Sie verwenden, und die wiederum halten andere Objekte. Der Schuldige scheint der Rückruf, das wird, behalten Sie einen Verweis auf Ihrer Ansicht für die Lebensdauer Ihrer Anwendung.
Es funktioniert (+1!) aber als Ian sagte, dass seine nicht optimale. Als workaround habe ich verschoben, die angefügte Eigenschaft (in meinem Fall genannt
ListenAttachedIsEnabledProperty
auf die Klasse-I außer Kraft setzen möchten und Hinzugefügt die folgenden zwei Zeilen im Konstruktorvar b = new Binding("IsEnabled") { Source = this }; SetBinding(ListenAttachedIsEnabledProperty, b);
Sie wirft beim aufrufen RegisterForNotification für mehrere Textfelder, wahrscheinlich, weil Sie nicht erstellen Sie mehrere DependencyProperties mit dem gleichen Namen.
InformationsquelleAutor amazedsaint
Es ist ein ziemlich eklig hack, aber man könnte ein zwei-Wege verbindlich, um das zu simulieren.
also so etwas wie:
dann erstellen die Bindung wie:
dann Haken bis der listener den event in Ihrer Unterklasse Steuerelement.
InformationsquelleAutor toshok
Können Sie nicht extern Abhören von abhängigkeitseigenschaften geändert Benachrichtigungen.
Können Sie den Zugriff auf die Abhängigkeitseigenschaft-Metadaten mit den folgenden code-Zeile:
Jedoch, das nur öffentliche member, ausgesetzt ist, "DefaultValue".
Gibt es eine Vielzahl von Möglichkeiten, dies zu tun in WPF. Aber Sie sind zurzeit nicht unterstützt Silverlight 2 oder 3.
InformationsquelleAutor markti
Die einzige Lösung, die ich sehe, ist zu hören LayoutUpdated Ereignis - ja, ich weiß, es heißt sehr viel. Beachten Sie jedoch, dass in einigen Fällen nicht genannt werden, obwohl Schriftgrad oder-Stil hat sich geändert.
InformationsquelleAutor Vlad Filyakov
Dies ist, was ich immer benutze (habe es noch nicht getestet auf SL allerdings nur auf WPF):
DependencyPropertyDescriptor nicht unterstützt Silverlight 2 oder 3
InformationsquelleAutor Paul Betts