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}" />