Не логика в обязательном конвекторе - PullRequest
0 голосов
/ 15 сентября 2011

Можно ли сделать что-то похожее на это, не вводя новую переменную, такую ​​как

bool showsearch =! ShowUser;

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

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

Вы можете сделать это, используя стиль и DataTrigger . Примените стиль к рассматриваемому элементу и предоставьте 2 значения источника данных - одно для установки видимости в true, другое в false. Аналогично DataTrigger, где значение НЕ равно NULL?

0 голосов
/ 27 сентября 2011

Вы можете написать конвертер BoolToCollapsed Converter ForExample

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}/>
0 голосов
/ 15 сентября 2011

Я не думаю, что это возможно, вам нужно создать инвертированный конвертер видимости, подобный этому,

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