WPF France

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille

S'abonner aux changements d'une DependencyProperty pour un objet particulier

Envoyer Imprimer PDF
Note des utilisateurs: / 2
MauvaisTrès bien 
Il est parfois nécessaire de s'abonner aux changements de valeurs pour une DependencyProperty afin d'effectuer une action particulière. Dans ce cas on ne peut pas utiliser l'astuce consistant à placer l'appel d'une méthode dans le setter de la propriété car le moteur de WPF ne fait pas appel aux setters mais ce débrouille tout seul. Dans cet article nous allons voir une solution dans le cas ou l’objet en question est un DependencyObject et dans le cas ou il n’en est pas un.

Votre objet hérite de DependencyObject, et vous pouvez le modifier

Dans ce cas, vous pouvez surcharger la méthode OnPropertyChanged et effectuez votre traitement si l’événement concerne la propriété en question. Rien de plus simple donc. Voici l’exemple :

   1: protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   2: {
   3:     base.OnPropertyChanged(e);
   4:     if (e.Property.Name == MonDependencyObject.MaDependencyProperty.Name)
   5:     {
   6:         //Mon traitement particulier
   7:     }
   8: }
   9:       

Dans d’autres cas vous ne pouvez cependant pas modifier l’objet en question ni même travaillé avec un objet en héritant. Il existe quand même une solution.

Si vous ne pouvez pas modifier son code

En fait il suffit d'obtenir l'objet DependencyPropertyDescriptor pour la DependencyProperty en question et d’ajouter un gestionnaire d’événements correspondant au changement de valeurs. Voici le petit bout de code  en question:

   1: DependencyPropertyDescriptor prop = DependencyPropertyDescriptor.FromProperty(
   2:                 MonDependencyObject.MaDependencyProperty,
   3:                 typeof(MonDependencyObject));
   4:  
   5: prop.AddValueChanged(this, value_changed);

Et le gestionnaire d’événements en question :

   1: public void value_changed(object sender, EventArgs e)
   2: {
   3: //Ma propriété a changé
   4: }

C’est tout, pour le code !

Un exemple d’utilisation est la possibilité d’animer certains objets n’étant pas des DependencyObject via une petite astuce que nous verrons dans un futur article.

Commentaires (0)
Mise à jour le Mardi, 23 Mars 2010 10:22  

Partagez


Article au hasard

  • J'ai été confronté ces dernières semaines à la problématique du développement multi-plateforme. Il est vrai que Microsoft a fait beaucoup d'effort pour uniformiser ces environnements de développement, mais dans la réalité le portage de code n'est pas toujours aussi évident qu'il n'y parait. On pourra tout de même noter l'existence de projet comme : Portable Library, qui permet de cons...
    Lire la suite...