Se si desidera un tipo di risultato diverso da bool, recentemente ho iniziato a utilizzare ConverterParameter per darmi la possibilità di annullare il valore risultante dai miei convertitori. Ecco un esempio:
[ValueConversion(typeof(bool), typeof(System.Windows.Visibility))]
public class BooleanVisibilityConverter : IValueConverter
{
System.Windows.Visibility _visibilityWhenFalse = System.Windows.Visibility.Collapsed;
/// <summary>
/// Gets or sets the <see cref="System.Windows.Visibility"/> value to use when the value is false. Defaults to collapsed.
/// </summary>
public System.Windows.Visibility VisibilityWhenFalse
{
get { return _visibilityWhenFalse; }
set { _visibilityWhenFalse = value; }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool negateValue;
Boolean.TryParse(parameter as string, out negateValue);
bool val = negateValue^(bool)value; //Negate the value using XOR
return val ? System.Windows.Visibility.Visible : _visibilityWhenFalse;
}
...
Questo convertitore converte un valore bool in System.Windows.Visibility. Il parametro consente di annullare il bool prima di convertirlo nel caso in cui si desideri il comportamento inverso. Si potrebbe utilizzare in un elemento come questo:
Visibility="{Binding Path=MyBooleanProperty, Converter={StaticResource boolVisibilityConverter}, ConverterParameter=true}"
Purtroppo se il vostro già utilizzando un convertitore di valore nella vostra vincolante, allora è necessario ricorrere a qualche tipo di tubazione/tecnica concatenamento al fine di negare il valore restituito da quel valore convertitore. – jpierson