代码之家  ›  专栏  ›  技术社区  ›  Taylor Leese

WPF-是否可以否定数据绑定表达式的结果?

  •  10
  • Taylor Leese  · 技术社区  · 15 年前

    我知道这很管用:

    <TextBox IsEnabled="{Binding ElementName=myRadioButton, Path=IsChecked}" />
    

    <TextBox IsEnabled="!{Binding ElementName=myRadioButton, Path=IsChecked}" />
    
    3 回复  |  直到 13 年前
        1
  •  12
  •   itowlson    15 年前

    您可以使用IValueConverter执行此操作:

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

    并使用其中一个作为绑定的转换器。

        2
  •  5
  •   xr280xr    13 年前

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

    此转换器将布尔转换为System.Windows.Visibility。该参数允许它在转换前对布尔求反,以防需要反向行为。您可以在如下元素中使用它:

    Visibility="{Binding Path=MyBooleanProperty, Converter={StaticResource boolVisibilityConverter}, ConverterParameter=true}"
    
        3
  •  2
  •   kiwipom    15 年前

    不幸的是,您不能直接对绑定表达式执行运算符,例如否定。。。我建议使用ValueConverter反转布尔值。