2009-12-04 9 views

Respuesta

12

Esto se puede hacer utilizando un IValueConverter:

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

y utilizar uno de estos como el convertidor de su unión.

+1

Desafortunadamente si su ya utilizando un convertidor de valores en su unión, entonces usted tiene que recurrir a algún tipo de tuberías/encadenamiento técnica con el fin de negar el valor devuelto por ese valor convertidor. – jpierson

2

Por desgracia, no se puede realizar directamente a los operadores, tales como la negación, en la expresión de enlace ... Yo recomiendo usar un ValueConverter para invertir el booleano.

5

Si desea un tipo de resultado que no sea bool, recientemente comencé a usar el parámetro Convertidor para tener la opción de negar el valor resultante de mis conversores. Aquí hay un ejemplo:

[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; 
    } 
    ... 

Este convertidor convierte un bool a System.Windows.Visibility. El parámetro le permite negar el bool antes de convertir en caso de que quiera el comportamiento inverso. Se podría utilizar en un elemento de la siguiente manera:

Visibility="{Binding Path=MyBooleanProperty, Converter={StaticResource boolVisibilityConverter}, ConverterParameter=true}" 
+0

Un muy buen consejo, ¡muchas gracias! – DreamOfMirrors

Cuestiones relacionadas