WPF: Como inverter um valor booliano usando um conversor

Como o título sugere, vamos criar um conversor para inverter um valor booliano. Porquê? Para não terem de criar uma nova propriedade no vosso view model sempre que querem usar o inverso de um booliano nos vossos templates.

Vamos usar a mesma classe ConverterMarkupExtension que definimos num artigo anterior. Serve apenas para não termos de criar um recurso estático sempre que queremos usar o conversor.

[ValueConversion(typeof(bool), typeof(bool))]
public class InvertBoolConverter : ConverterMarkupExtension<InvertBoolConverter>
{
    public InvertBoolConverter()
    {
    }
    
    public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null && value is bool)
        {
            return !((bool)value);
        }
  
        return true;
    }
    
    public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Convert(value, targetType, parameter, culture);
    }
}

No exemplo que se segue temos uma propriedade IsBusy no view model que nos diz quando há trabalho a ser executado. Queremos desactivar o botão nesse caso e fazemos isso com a ajuda do nosso novo conversor.

<Button
    Content="Do something"
    IsEnabled="{Binding IsBusy, Converter={my:InvertBoolConverter}}"
    Command="{Binding DoSomethingCommand}" />

Artigos relacionados