2009-12-04 10 views

risposta

12

È possibile farlo utilizzando un IValueConverter:

public class NegatingConverter : IValueConverter 
{ 
    public object Convert(object value, ...) 
    { 
    return !((bool)value); 
    } 
} 

e utilizzare uno di questi come il convertitore del Binding.

+1

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

2

Purtroppo, non è possibile eseguire direttamente gli operatori, come ad esempio la negazione, sull'espressione rilegatura ... Ti consiglio di utilizzare un ValueConverter per invertire il booleano.

5

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}" 
+0

Un consiglio davvero buono, grazie mille! – DreamOfMirrors

Problemi correlati