Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NullToVisibilityConverter如果不为null,则使其可见_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# NullToVisibilityConverter如果不为null,则使其可见

C# NullToVisibilityConverter如果不为null,则使其可见,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,要在listview中隐藏和显示SelectedItem的属性网格吗 <UserControl xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" <ListView> <!--here is list view--> </ListView> <xctk:PropertyGrid SelectedObject="{Binding Acti

要在listview中隐藏和显示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>

然后在XAML资源中引用NullVisibilityConverter

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

要使用转换器,我们可以在资源中创建一个转换器,并在binding语句中将其作为静态资源引用

<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 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}">


如何在我的xaml中使用它?感谢您展示了如何实现NullToVisibilityConverter,这可能是我的重复。我有一个DataGrid,它有一个刷新按钮,但只有在某些情况下。将按钮的图像源设置为null隐藏了图像,但保留了鼠标悬停时可见的按钮。我在按钮的可见性属性上使用了这个转换器,它工作得非常好。非常感谢。
<converters:NullReferenceToVisibilityConverter x:Key="NullToVis" />
<StackPanel Visibility="{Binding MyObject, Converter={StaticResource NullToVis}}">
<StackPanel Visibility="{Binding MyObject, Converter={StaticResource NullToVis}, ConverterParameter=Hidden}">