Avec XAML on utilise souvent des Converters lors d'un Binding pour adapter la donnée source vers le type destination. Par exemple le Converter BooleanToVisibilityConverter convertit une valeur booléenne en une valeur de l'énumération Visibility.
Ce mécanisme est très pratique mais on peut se retrouver rapidement avec beaucoup de converters du type :
- BooleanToVisibilityConverter
- InverseBooleanConverter
- EnumerableToBooleanConverter
- etc.
Au lieu de créer des Converters spécifiques à chaque cas il vaut mieux essayer de les rendre génériques afin de les réutiliser dans un maximum de cas et ainsi éviter leur multiplication. Par exemple les converters ci-dessus peuvent se résumer en un seul Converter : BooleanToValueConverter. A chaque fois la source est une expression booléenne (égal vrai, est null, est vide), seule la valeur en sortie diffère. Il suffit donc de la rendre éditable. Pour cela il est possible de définir des propriétés dans les Converters :
public class BooleanToValueConverter : IValueConverter
On peut maintenant utiliser ce Converter dans différents cas :
True
False
Nous avons maintenant un seul Converter mais celui-ci n'est plus limité à un seul cas d'usage.
Le code complet est disponible ici.


