DependencyProperty

L’utilisation de donnée au sein d’interface graphique pose régulièrement le souci de leur rafraichissement. De plus, nombreux sont les difficultés pour effectuer des actions suite au KeyDown, KeyRelease, MouseClick, ContentUpdated etc… Pour, notamment, faciliter cela ont donc été créés les DependencyProperty.

Presentation : Accesseur et DépendencyProperty

Prenons l’exemple d’une DependencyProperty MaxCaractereAllowed et voyons ce qu’elle permettrait pour un composant graphique qui chercherait à faire un traitement en fonction d’un nombre maximum de caractère.

public int MaxCaracterAllowed
{
   get { return (int)GetValue(MaxCaracterAllowedProperty); }
   set { SetValue(MaxCaracterAllowedProperty, value); }
}

public static readonly DependencyProperty MaxCaracterAllowedProperty =
DependencyProperty.Register(
   "MaxCaracterAllowed", 
   typeof(int), 
   typeof(DualPropTxb), 
   new PropertyMetadata(0)
);

Le fonctionnement classique d’une DépendencyProperty est le suivant :

Un accesseur permet d’accéder/modifier une DependencyProperty. Cette dernière est issu de son enregistrement depuis la méthode Static Registrer qui prend :

  • Le nom de la DependencyProperty.
  • Le type de la DependencyProperty
  • Le type de la classe qui l’utilise
  • Des Métadonnées (dont le constructeur actuel définit une valeur par défaut)

Typiquement, on devine que le nom donné permettra au mécanisme de Binding de fonctionner, grâce à l’indication que la Property a été modifié.
Aussi, les Métadonnées ont un rôle majeur : un autre de ses constructeurs attend par exemple en deuxième paramètre une méthode de CallBack.

Application

Voyons maintenant quelques point de la documentation de Microsoft au sujet des DependencyProperty et comment elle s’applique au cas présent :

  • The property can be set in a style.
<comps:DualPropTxb.Style>
   <Style TargetType="comps:DualPropTxb">
      <Setter Property="MaxCaracterAllowed" Value="5" />
   </Style>
</comps:DualPropTxb.Style>

Ici, la DependencyProperty du composant DualProbTxb (issue d’une TextBox) est setté dans le style.

  • The property can be set through data binding.
{Binding MaxCaracterAllowed}

Ici, la DepencyProperty lancera le rafraichissement de l’affichage à chaque modification (PropertyChanged déjà implémenté).

  • The property can be set with a dynamic resource reference.
<comps:DualPropTxb MaxCaracterAllowed="{DynamicResource MaxValue}" />
  • The property can report when the previous value of the property has been changed and the property value can be coerced.
public static readonly DependencyProperty MaxCaracterAllowedProperty =
   DependencyProperty.Register(
      "MaxCaracterAllowed", 
      typeof(int), 
      typeof(DualPropTxb), 
      new PropertyMetadata(
         0,//default value
         DoAfterChanged//Custom callback method after changed
      )
);

Ici la méthode custom DoAfterChanged sera apellé dés que la valeur aura été considérée comme « changed ».

Autres Utilitées

Non abordées ici, les DependencyProperties inclut aussi d’autre cas de figure :

  • Elle peuvent être animées : Animation Overview.
  • Elles peuvent etre modifiées dans la fenêtre « Propriétés » de Visual Studio
Source
  • https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/binding-sources-overview?redirectedfrom=MSDN
  • https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-callbacks-and-validation?view=netframework-4.8
  • https://docs.microsoft.com/en-us/dotnet/api/system.windows.dependencyproperty?view=netframework-4.8

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *