164 votes

Comment inverser le BooleanToVisibilityConverter ?

J'utilise un BooleanToVisibilityConverter dans WPF pour lier la propriété Visibility d'un contrôle à un booléen. Cela fonctionne bien, mais j'aimerais que l'un des contrôles soit masqué si le booléen est vrai, et affiché s'il est faux.

Est-ce possible ?

Merci, Andy

0 votes

Note : à partir de la version bêta 4, silverlight n'inclut pas BooleanToVisibility - vous devrez donc l'implémenter vous-même.

0 votes

Ajout d'une suggestion vocale de l'utilisateur pour obtenir le support de l'inversion. visualstudio.uservoice.com/forums/121579-visual-studio-2015/

0 votes

Je ne peux pas croire qu'ils n'aient pas implémenté des paramètres de convertisseur pour faire de telles choses.

-2voto

OscarRyz Points 82553

Je sais que cela date, mais vous n'avez pas besoin de réimplémenter quoi que ce soit.

Ce que j'ai fait, c'est annuler la valeur de la propriété comme ceci :

<!-- XAML code -->
<StackPanel Name="x"  Visibility="{Binding    Path=Specials, ElementName=MyWindow, Converter={StaticResource BooleanToVisibilityConverter}}"></StackPanel>    
<StackPanel Name="y"  Visibility="{Binding Path=NotSpecials, ElementName=MyWindow, Converter={StaticResource BooleanToVisibilityConverter}}"></StackPanel>        

....

//Code behind
public bool Specials
{
    get { return (bool) GetValue(SpecialsProperty); }
    set
    {
        NotSpecials= !value; 
        SetValue(SpecialsProperty, value);
    }
}

public bool NotSpecials
{
    get { return (bool) GetValue(NotSpecialsProperty); }
    set { SetValue(NotSpecialsProperty, value); }
}

Et ça marche très bien !

Est-ce que j'ai manqué quelque chose ?

7 votes

Vous pensez que c'est une solution plus facile, et pour une seule propriété, cela pourrait même être le cas (ce n'est pas réutilisable pour plusieurs propriétés, vous devez l'implémenter pour chacune). J'ai le sentiment que ce n'est pas le bon endroit pour l'implémentation, car elle n'a rien à voir avec le viewmodel/codeBehind et tout avec la vue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X