Au lieu d'inverser, vous pouvez atteindre le même objectif en utilisant un générique IValueConverter
qui peut convertir une valeur booléenne en configurable les valeurs cibles pour le vrai et le faux. Vous trouverez ci-dessous l'une de ces implémentations :
public class BooleanConverter<T> : IValueConverter
{
public BooleanConverter(T trueValue, T falseValue)
{
True = trueValue;
False = falseValue;
}
public T True { get; set; }
public T False { get; set; }
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is bool && ((bool) value) ? True : False;
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is T && EqualityComparer<T>.Default.Equals((T) value, True);
}
}
Ensuite, sous-classez-la où T
es Visibility
:
public sealed class BooleanToVisibilityConverter : BooleanConverter<Visibility>
{
public BooleanToVisibilityConverter() :
base(Visibility.Visible, Visibility.Collapsed) {}
}
Enfin, voici comment vous pourriez utiliser BooleanToVisibilityConverter
ci-dessus dans XAML et le configurer pour, par exemple, utiliser Collapsed
pour le vrai et Visible
pour de faux :
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>
Cette inversion est utile lorsque vous voulez vous lier à une propriété booléenne nommée IsHidden
comme opposé IsVisible
.
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.
0 votes
La solution la plus simple que j'ai trouvée est de créer une propriété dans le modèle qui renvoie la valeur négative de l'original. public bool ShowMyControl { get { return !theValue ; } } Dans WPF Visibility="{Binding MyModel.ShowMyControl, Converter={StaticResource BooleanToVisibilityConverter}}"