20mai 2011

WPF : Le Binding dans tous ses états

La liaison de données, ou databinding permet de lier une propriété d'un contrôle graphique à une propriété du modèle de données de l'application.

Le databinding permet, outre la liaison sur les données d'un modèle, des liaisons sur les propriétés des éléments graphiques affichés.

Il est ainsi possible de lier la largeur d'un contrôle avec celle de son parent dans la hiérarchie visuelle.

Néanmoins, Visual Studio 2008 ne propose pas d'intellisense pour faciliter l'utilisation du databinding. Aucune assistance à la saisie de ce coté. La plupart du temps le code XAML présenté ci dessous est généré par des outils tels que Microsoft Blend.

Voici donc une série de code sample qui permettent de créer des liaisons de données - traduction officielle du databinding en français - par rapport à des éléments graphiques.

Le code n'est pas de moi et provient d'une question posée sur StackOverflow.com.

Binding sur une propriété de l'objet lui même

{Binding Path=PathToProperty, 
    RelativeSource={RelativeSource Self}}

On pourrait appeler ça le SelfBinding en quelque sorte.

Binding sur un élément parent du contrôle

Fonctionne en WPF, ne fonctionne pas en Silverlight 3.

{Binding Path=PathToProperty, 
    RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

Utile pour déclencher des modifications graphiques par rapport à l'état d'un autre contrôle.

Binding sur une propriété définit dans un template

Fonctionne en WPF Silverlight 3

{Binding Path=PathToProperty, 
    RelativeSource={RelativeSource TemplatedParent}}

Celle ci est la plus intéressante. Elle permet dans un template de lier deux propriétés ensembles. Comme par exemple la taille d'un contrôle imbriquée dans un ControlTemplate. Ne fonctionne qu'avec un control template en tant que "conteneur".

Binding sur une propriétée d'un contrôle nommé

Fonctionne en WPF, Silverlight 3

{Binding Path=PathToProperty,
    ElementName=MyControlName}

Cette méthode de binding permet de créer un lien vers une propriétée d'un autre composant graphique. Par exemple lorsqu'on souhaite cacher/afficher en fonction d'une checkbox.

Sources

Mise à jour

  • Mis à jour le 20/05/2011 : Ajout du binding sur ElementName

aucun commentaire

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.