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


  • Une annonce qui est peut être passée inapercue pour vous pendant la build mais WPF 4.5 est là !

    Vous pouvez dès à présent télécharger sur MSDN la preview du framework 4.5 et l'essayer

    Une série de billets sur chacune des nouveautés et en cours de rédaction.

    En attendant voici une liste non exhaustive des apports fait à notre framework préféré :
    Ribbon control Improved...
    Lire la suite...