【问题标题】:NullToVisibilityConverter make visible if not null如果不为空,则 NullToVisibilityConverter 使可见
【发布时间】:2014-03-23 06:38:30
【问题描述】:

想要在列表视图中隐藏和显示 SelectedItem 的属性网格

<UserControl xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
      <ListView>
         <!--here is list view-->
      </ListView>
      <xctk:PropertyGrid SelectedObject="{Binding Active}" Visibility="{Binding Active, Converter=NullToVisibilityConverter}" >  
   </xctk:PropertyGrid>
</UserControl>

所以我需要转换器并在可见性属性转换器中使用它。有什么帮助吗?

【问题讨论】:

标签: c# wpf xaml mvvm


【解决方案1】:
public class NullVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null ? Visibility.Hidden : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后在您的 XAML 资源中引用 NullVisibilityConverter。

<StackPanel.Resources>
  <simpleXamlContent:NullVisibilityConverter x:Key="NullToVisibilityConverter"/>
</StackPanel.Resources>

【讨论】:

  • 如何在我的 xaml 中使用它?
  • &lt;StackPanel Visibility="{Binding MyObject, Converter={StaticResource NullToVisibilityConverter}}"&gt;
【解决方案2】:

要使用转换器,我们可以在资源中创建一个,并在绑定语句中将其称为静态资源。

<UserControl xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit">
    <UserControl.Resources>
      <yournamespace:NullVisibilityConverter x:Key="NullToVisibilityConverter"/>
    </UserControl.Resources>

    <ListView>
    <!--here is list view-->
    </ListView>

    <xctk:PropertyGrid SelectedObject="{Binding Active}" Visibility="{Binding Active, Converter={StaticResource NullToVisibilityConverter}}" >  
    </xctk:PropertyGrid>
</UserControl>

和转换器类本身

public class NullVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null ? Visibility.Hidden : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

【讨论】:

  • 感谢您展示如何实现 NullToVisibilityConverter。我有一个获取刷新按钮的 DataGrid,但仅在某些情况下。将 Button 的 Image 源设置为 null 隐藏了图像,但保留了在鼠标悬停时可见的按钮。我在 Button 的 Visibility 属性上使用了这个转换器,效果很好。谢谢!
【解决方案3】:

还有一些更有用的版本允许设置默认的隐身值:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    string defaultInvisibility = parameter as string;
    Visibility invisibility = (defaultInvisibility != null) ?
        (Visibility)Enum.Parse(typeof(Visibility), defaultInvisibility)
        : Visibility.Collapsed;
    return value == null ? invisibility : Visibility.Visible;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    return DependencyProperty.UnsetValue;
}

在资源中的任何地方添加:

<converters:NullReferenceToVisibilityConverter x:Key="NullToVis" />

然后像那里一样使用它:

<StackPanel Visibility="{Binding MyObject, Converter={StaticResource NullToVis}}">
<StackPanel Visibility="{Binding MyObject, Converter={StaticResource NullToVis}, ConverterParameter=Hidden}">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2013-08-07
    • 2015-02-19
    • 2012-11-21
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多