Convertisseurs génériques et réutilisables

Je vais vous présenter des convertisseurs génériques qui vous permettront de passer de plusieurs dizaines de convertisseurs à uniquement 2 classes de convertisseurs réutilisables. Merci à Clément Gatin de MCS qui me les a fait découvrir lors de ma dernière mission.

Petit rappel (pour plus d’informations sur le binding et les converter se référer au msnd ):

Une liaison de données consiste en une cible et une source. La cible est généralement une propriété issue d’un contrôle , la source est habituellement une propriété d’objet de données. Si vous voulez mettre en forme et afficher un type qui n’est pas une chaîne dans un contrôle, tel qu’une classe TextBox, vous pouvez utiliser un convertisseur.

Le code ci-dessous est ciblé application Windows Store (C# XAML), il est possible d’utiliser celui-ci pour des applications WPF ou silverlight mais quelques modifications seront nécessaires.

Pour lier un booléen à une visibilité le code suivant peut être utilisé :

[pastacode lang= »cpp » message= »Convertisseur classique et spécifique à un cas précis » highlight= » » provider= »manual »]

[/pastacode]

Cette approche, que j’utilisais auparavant, est fonctionnelle mais vous aurez besoin d’un convertisseur pour chaque cas particulier. Par exemple pour notre booléen vous pourriez avoir besoin d’un BooleanToNotVisibility, BooleanToButtonColor, BooleanToOpacity…

Vous finirez votre projet avec des dizaines de convertisseurs, avec pour chacun une logique légèrement différent.

Nous allons voire comment généraliser notre logique de conversion pour ne plus utiliser que 2 convertisseurs pour la vaste majorité des cas.

 

Tout d’abord le convertisseur de base (abstrait) :

[pastacode lang= »cpp » message= »BaseConverter » highlight= » » provider= »manual »]

[/pastacode]

Puis le convertisseur magique, celui-ci gérera les cas les plus communs qui peuvent être résumés à une opération switch :

[pastacode lang= »cpp » message= »SwitchConverter » highlight= » » provider= »manual »]

[/pastacode]

Nous aurons aussi besoin d’un convertisseur pour gérer les cas null ou défaut :

[pastacode lang= »cpp » message= »NullConverter » highlight= » » provider= »manual »]

[/pastacode]

 

Voilà en copiant ces trois classes vous n’aurez plus besoin d’écrire une seule classe de convertisseur pour vos projets 🙂 . Vous pourrez gérer la majeur partie de vos binding en ayant uniquement a modifié la déclaration de ceux-ci, aucun code a réécrire !

[pastacode lang= »markup » message= »Définition des converter uniquement en xaml » highlight= » » provider= »manual »]

[/pastacode]

Et pour finir une page d’exemple utilisant nos convertisseurs

[pastacode lang= »markup » message= »Page utilisant nos converteurs génériques » highlight= » » provider= »manual »]

[/pastacode]

Et le résultat:

blog ai3 ConverterDemoResult-300x169 Convertisseurs génériques et réutilisables

 

Si vous avez besoin d’un convertisseur plus complexe vous devriez peut être placer cette logique dans votre ViewModel et utiliser un convertisseur générique. Attention la logique contenue dans ces convertisseurs génériques est plus lourde que celle de convertisseurs basique, à éviter si vous voulez afficher des listes contenant des centaines d’objets.

 

Pour résumer : 

  • Vous passer de plusieurs dizaines de convertisseurs dans votre code c# à 2 convertisseurs génériques réutilisable
  • Vous définissez toujours vos convertisseurs dans le xaml mais cette fois ci en précisant le fonctionnement de ceux-ci.
  • Suite à débat et tests de performance (merci à la communauté Windows App 🙂 ) ces convertisseurs se révèlent gourmands en ressources, à utiliser avec parcimonie donc.

Pour améliorer les performances de vos convertisseurs génériques la suite c’est par ici.

Thierry,

 

One thought on “Convertisseurs génériques et réutilisables

  1. Pingback: Retour sur les convertisseurs génériques | Le blog Ai3Le blog Ai3

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.