C# 是否基于属性显示/隐藏网格行?

C# 是否基于属性显示/隐藏网格行?,c#,wpf,grid,C#,Wpf,Grid,我有一个有多行的网格。我想基于属性隐藏/显示其中一行。可能吗 在我的例子中,我有两个网格行。一个具有属性网格,另一个具有列表框。列表框绑定到对象,列表项绑定到该对象内的数组。我想要的是在数组为空时隐藏行(包括列表框)。因此,当我的对象的数组为空时,您应该只看到一个带有属性网格的窗口,而没有其他内容 谢谢 是的。将ListBox的可见性属性绑定到包含数组的对象。然后应用一个自定义值转换器,该转换器将查看数组并查看它是否为空。如果为空,则返回Visibility.Collapsed。否则,返回Vis

我有一个有多行的网格。我想基于属性隐藏/显示其中一行。可能吗

在我的例子中,我有两个网格行。一个具有属性网格,另一个具有列表框。列表框绑定到对象,列表项绑定到该对象内的数组。我想要的是在数组为空时隐藏行(包括列表框)。因此,当我的对象的数组为空时,您应该只看到一个带有属性网格的窗口,而没有其他内容


谢谢

是的。将ListBox的可见性属性绑定到包含数组的对象。然后应用一个自定义值转换器,该转换器将查看数组并查看它是否为空。如果为空,则返回Visibility.Collapsed。否则,返回Visibility.Visible。然后确保RowDefinition的高度为“自动”,并且当列表框折叠时,它将自动收缩为零

您的值转换器将如下所示:

public class EmptyVisiblityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        YourObject yourObject = value as YourObject;
        return yourObject.YourArray.Count > 0 ? Visibility.Visible : Visibility.Hidden;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}
<Window.Resources>
    <local:EmptyVisiblityConverter x:Key="emptyVisibilityConverter"/>
</Window.Resources>
...
<ListBox Visibility="{Binding Path=YourObject, Converter={StaticResource emptyVisibilityConverter}}"/>
您的XAML应该如下所示:

public class EmptyVisiblityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        YourObject yourObject = value as YourObject;
        return yourObject.YourArray.Count > 0 ? Visibility.Visible : Visibility.Hidden;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}
<Window.Resources>
    <local:EmptyVisiblityConverter x:Key="emptyVisibilityConverter"/>
</Window.Resources>
...
<ListBox Visibility="{Binding Path=YourObject, Converter={StaticResource emptyVisibilityConverter}}"/>

...

是。将ListBox的可见性属性绑定到包含数组的对象。然后应用一个自定义值转换器,该转换器将查看数组并查看它是否为空。如果为空,则返回Visibility.Collapsed。否则,返回Visibility.Visible。然后确保RowDefinition的高度为“自动”,并且当列表框折叠时,它将自动收缩为零

您的值转换器将如下所示:

public class EmptyVisiblityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        YourObject yourObject = value as YourObject;
        return yourObject.YourArray.Count > 0 ? Visibility.Visible : Visibility.Hidden;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}
<Window.Resources>
    <local:EmptyVisiblityConverter x:Key="emptyVisibilityConverter"/>
</Window.Resources>
...
<ListBox Visibility="{Binding Path=YourObject, Converter={StaticResource emptyVisibilityConverter}}"/>
您的XAML应该如下所示:

public class EmptyVisiblityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        YourObject yourObject = value as YourObject;
        return yourObject.YourArray.Count > 0 ? Visibility.Visible : Visibility.Hidden;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}
<Window.Resources>
    <local:EmptyVisiblityConverter x:Key="emptyVisibilityConverter"/>
</Window.Resources>
...
<ListBox Visibility="{Binding Path=YourObject, Converter={StaticResource emptyVisibilityConverter}}"/>

...

这是一个仅限xaml的解决方案

 <ListBox Name="MyListBox" MinHeight="200">
  <ListBox.Style>
    <Style>
      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=MyListBox, Path=Items.Count}" Value="0">
          <Setter Property="ListBox.Visibility" Value="Collapsed"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </ListBox.Style>
</ListBox>

这是一个仅限xaml的解决方案

 <ListBox Name="MyListBox" MinHeight="200">
  <ListBox.Style>
    <Style>
      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=MyListBox, Path=Items.Count}" Value="0">
          <Setter Property="ListBox.Visibility" Value="Collapsed"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </ListBox.Style>
</ListBox>