【问题标题】:Not logic in Binding conveter不是绑定转换器中的逻辑
【发布时间】:2011-09-28 00:03:03
【问题描述】:

是否可以在不引入类似这样的新变量的情况下做类似的事情

bool showsearch = !ShowUser;

Visibility="{Binding !ShowUser, Converter={StaticResource BoolToVis}}"

【问题讨论】:

    标签: xaml data-binding


    【解决方案1】:

    您可以使用样式和DataTrigger 来实现。将样式应用于相关元素,并提供 2 个数据触发器值 - 一个将可见性设置为 true,一个设置为 false。类似于DataTrigger where value is NOT null?

    【讨论】:

      【解决方案2】:

      我认为不可能,你必须像这样创建一个反向可见性转换器,

      public class InvertedBooleanToVisibilityConverter : IValueConverter
      {
          public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
          {
              bool flag = false;
              if (value is bool)
              {
                  flag = (bool) value;
              }
              else if (value is bool?)
              {
                  bool? nullable = (bool?) value;
                  flag = nullable.Value;
              }
              return flag ? Visibility.Collapsed : Visibility.Visible;
          }
      
          public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
          {
              return value is Visibility && (Visibility) value == Visibility.Collapsed;
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可以编写一个转换器 BoolToCollapsed 转换器示例

        public class BoolToVisibleConverter : ConverterMarkupExtension<BoolToVisibleConverter>, 
                      IValueConverter
        {
              public object Convert(object value, Type targetType, object parameter, 
                                        CultureInfo culture)
                    {
              bool obj=(bool) value;
              if(!obj)
              return Visibility.Collapsed;
              else
              return Visibility.Visible;
        
            }
             public object ConvertBack(object value, Type targetType, object parameter, 
                     CultureInfo culture)
                     {
                       Visibility obj=(Visibility) value;
                       if(obj==Visibility.Visible)
                       return true;
                       else
                       return false;
                     }
        
        }
        

        将静态资源添加到 Window.Resources

        <Window.Resources>
            <converter:BoolToVisibleConverter x:Key="BoolToCollapsed"/>
        </Window.Resources>
        

        然后将其用于 Grid、DockPanel 或任何其他

         <DockPannel Visibility={Binding DockVisible, 
                 Converter={StaticResource BoolToCollapsed}/>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-20
          • 1970-01-01
          • 2011-06-13
          • 1970-01-01
          相关资源
          最近更新 更多