Xamarin Forms - negate bool binding values
Option One: Converter
Define the converter:
public class InverseBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return !((bool)value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
//throw new NotImplementedException();
}
}
Usage in XAML:
<Label x:Name="MainLabel"
isVisible="{Binding IsVisibleEntry, Converter={Helpers:InverseBoolConverter}}"/>
XAML Header
xmlns:Helpers="clr-namespace:HikePOS.Helpers"
Option Two: Trigger
<Label x:Name="MainLabel" isVisible="{Binding IsVisibleEntry}">
<Label.Triggers>
<DataTrigger TargetType="Label" Binding="{Binding IsVisibleEntry}" Value="True">
<Setter Property="IsVisible" Value="False" />
</DataTrigger>
</Label.Triggers>
</Label>
You will need to create an Invert converter so your binding would look somewhat like this:
public class InverseBoolConverter : IValueConverter
{
public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return !(bool)value;
}
public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return !(bool)value;
}
}
In your XAML
<local:InverseBoolConverter x:Key="inverter"/>
<Entry
x:Name="TextEntry"
IsVisible="{Binding IsVisibleEntry, Converter={StaticResource inverter}}"
/>
Instead of writing your own converter, you could use Xamarin Community Toolkit which now has a converter invertedboolconverter that can be used out of the box. This example (taken from Microsoft's documentation) shows how it works:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
x:Class="MyLittleApp.MainPage">
<ContentPage.Resources>
<ResourceDictionary>
<xct:InvertedBoolConverter x:Key="InvertedBoolConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<StackLayout>
<Label IsVisible="{Binding MyBooleanValue, Converter={StaticResource InvertedBoolConverter}}" />
</StackLayout>
</ContentPage>