Silverlight: Comment recevoir une notification de changement dans hérité d'une DependencyProperty
J'ai un contrôle qui hérite de (vous l'aurez deviné) de Contrôle.
Je veux recevoir une notification à chaque fois que le FontSize
ou Style
propriétés sont modifiées. Dans WPF, je voudrais le faire en appelant DependencyProperty.OverrideMetadata()
. Bien sûr, des choses utiles comme qui n'ont pas de place dans Silverlight. Alors, comment peut-on recevoir ces types de notifications?
OriginalL'auteur MojoFilter | 2009-05-07
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est une meilleure façon. Toujours besoin de voir le pour et le Contre.
Et maintenant, vous pouvez appeler RegisterForNotification pour vous inscrire à une notification de modification d'une propriété d'un élément, comme .
Voir mon post ici sur le même http://amazedsaint.blogspot.com/2009/12/silverlight-listening-to-dependency.html
L'utilisation de Silverlight 4.0 bêta.
Aussi longtemps que nous avons besoin de le faire entièrement à partir du code, je suppose que nous n'avons pas d'autre option jusqu'à ce que nous obtenir le DependencyPropertyDescriptor dans Silverlight à partir de MS
J'ai aussi utilisé cette approche, malheureusement, il ya des fuites de mémoire. Dans mon expérience, il contiendra une référence à ce que jamais l'élément que vous utilisez avec, qui seront à leur tour contenir d'autres objets. Le coupable semble être la fonction de rappel qui permettra de conserver une référence à votre vue pour la durée de vie de votre application.
Il fonctionne (+1!) mais comme Ian a dit son n'est pas optimal. Comme une solution de contournement que j'ai déplacé sur le terrain attenant (dans mon cas appelé
ListenAttachedIsEnabledProperty
à la classe que je veux remplacer et ajouté les deux lignes suivantes dans le constructeurvar b = new Binding("IsEnabled") { Source = this }; SetBinding(ListenAttachedIsEnabledProperty, b);
il va lancer lors de l'appel de RegisterForNotification pour plusieurs zones de texte probablement parce que vous ne pouvez pas créer plusieurs DependencyProperties avec le même Nom.
OriginalL'auteur amazedsaint
C'est un peu dégoûtant hack, mais vous pouvez utiliser une liaison bidirectionnelle à simuler cela.
c'est à dire quelque chose comme:
puis créer la liaison comme:
puis crochet jusqu'à l'écouteur d'événement dans votre contrôle de la sous-classe.
OriginalL'auteur toshok
Vous ne pouvez pas l'extérieur écouter de la dépendance de la propriété a changé de notifications.
Vous pouvez accéder aux Métadonnées de Propriété de Dépendance avec la ligne de code suivante:
Cependant, le seul membre du public qui est exposée est "DefaultValue".
Il y a une multitude de façons de le faire en WPF. Mais ils ne sont actuellement pas pris en charge par Silverlight 2 ou 3.
OriginalL'auteur markti
La seule solution que je vois c'est d'écouter les LayoutUpdated événement - oui, je sais, il est appelé beaucoup de choses. Notez cependant que dans certains cas, il ne sera pas appelé, même si FontSize ou le Style a changé.
OriginalL'auteur Vlad Filyakov
C'est ce que j'utilise toujours (ne l'ai pas testé sur SL si, juste sur WPF):
DependencyPropertyDescriptor n'est pas pris en charge par Silverlight 2 ou 3
OriginalL'auteur Paul Betts