WPF: comment utiliser les 2 convertisseurs 1 liaison?
J'ai un contrôle que je veux afficher/masquer, en fonction de la valeur d'un booléen.
J'ai un NegatedBooleanConverter (commutateurs de true à false, et vice-versa) et j'ai besoin d'exécuter ce convertisseur en premier.
J'ai un BooleanToVisibilityConverter et j'ai besoin d'exécuter ce convertisseur après le NegatedBoolConverter.
Comment puis-je résoudre ce problème? Je veux le faire en XAML.
edit: c'est une solution possible.
Qui ne semble pas fonctionner. Il convertit la valeur avec le séparer les convertisseurs et puis quelque chose avec les valeurs converties.
Ce dont j'ai besoin est:
- Convertir la valeur avec le premier convertisseur (ce qui donne convertedValue).
- Convertir convertedValue avec le deuxième convertisseur et c'est ce résultat que j'ai besoin.
- oui, la solution est lié à est probablement le meilleur...
- Voir aussi le Chaînage de plusieurs convertisseurs en XAML
- La ville dit mieux que ici, sa solution permet de chaîne autant que vous le souhaitez, semblable à jberger réponse, mais celle-ci est encore plus élégant et court dans la mise en œuvre
Vous devez vous connecter pour publier un commentaire.
C'est ce que j'ai fait:
et je l'appelle comme ceci:
Un MultiValueConverter pourrait également être possible je pense. Peut-être que je vais essayer plus tard.
Expansion sur de Sodium, la grande réponse...
XAML
Classe
Ce que nous faisons dans notre projet, c'est de faire régulièrement BooleanToVisibilityConverter, dit convertisseur prend un paramètre (de rien du tout, un string, int, bool, peu importe). Si le paramètre est défini, il inverse le résultat, si pas, il crache de l'ordinaire résultat.
Dans ce cas, vous n'avez pas besoin d'un convertisseur de chaîne. Vous avez juste besoin d'un configurable convertisseur. Ceci est similaire à Carlo réponse ci-dessus, mais définit explicitement les valeurs vrai et faux (ce qui signifie que vous pouvez utiliser les mêmes convertisseurs Caché, Visible ou l'effondrement des conversions).
Puis en XAML:
Converter={c:BooleanConverter(Visibility) True=Visible, False=Collapsed}
élément de syntaxe:<c:BooleanConverter x:TypeArguments="FontWeight" True="Bold" False="Normal" />
Si vous ne pouvez pas utiliser XAML 2009, vous pouvez toujours faire la classe de base générique, mais vous avez besoin de béton les classes dérivées pour chaque type générique.Pour répondre à ma propre question: j'utilise cette solution depuis des années maintenant: http://www.codeproject.com/Articles/15061/Piping-Value-Converters-in-WPF
Il fait un nouveau convertisseur de 2 convertisseurs, d'appeler le premier un premier, puis le second, etc, etc.
Je suis assez heureux avec cette solution.
Je viens de créer ce que j'ai appelé ReversedBooleanToVisibilityConverter pour l'essentiel à faire ce que ces 2 permettrait de le faire pour vous, mais en une seule étape.
Pour répondre à ce problème spécifique, au lieu d'utiliser deux convertisseurs de votre pouvez écrire votre propre BoolToVisibilityConverter qui utilise le ConverterParameter (comme un bool) afin de déterminer si ou de ne pas nier l'origine Booléenne.
Personnellement, je voudrais juste faire 1 seul convertisseur qui fait la conversion totale. Sauf si vous avez désespérément besoin les convertisseurs (comme la négation) dans d'autres endroits, il sera plus facile à maintenir (omi) si la conversion est effectuée à la fois, en un seul endroit.
Je pense que vous souhaiterez peut-être utiliser un Multiconverter ici au lieu de deux convertisseurs. Vous devriez être en mesure de réutiliser la logique de vos convertisseurs. Découvrez cette discussion pour commencer.