c# - 根据属性显示/隐藏网格行?

标签 c# wpf grid

我有一个包含多行的网格。我想根据属性隐藏/显示其中一行。那可能吗?

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

谢谢!

最佳答案

是的。将 ListBox 的 Visibility 属性绑定(bind)到包含该数组的对象。然后应用一个自定义值转换器,该转换器将查看数组并查看它是否为空。如果为空,则返回 Visibility.Collapsed。否则,返回 Visibility.Visible。然后确保您的 RowDefinition 的高度为 Auto,当 ListBox 折叠时它会自动收缩为空。

您的值转换器看起来像这样:

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

您的 XAML 应如下所示:

<Window.Resources>
    <local:EmptyVisiblityConverter x:Key="emptyVisibilityConverter"/>
</Window.Resources>
...
<ListBox Visibility="{Binding Path=YourObject, Converter={StaticResource emptyVisibilityConverter}}"/>

关于c# - 根据属性显示/隐藏网格行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1112105/

相关文章:

c# - 使用 linq 更新列表中的列表

c# - 绑定(bind) List<string> 到 ComboBox

c# - 在 Scatterview 中删除已在 C# LibraryStack 中使用的文件

Selenium GRID 与 TestNG 并行

c# - 如何解决SSRS "Could not load Authorization extension"异常?

c# - C# 中的 MD5 哈希值与 Action Script 中的 MD5 哈希值不匹配

wpf - 当窗口在 WPF 中获得焦点时如何得到通知?

grid - 带有下拉模板的 Kendo UI 网格保存到服务器后不更新值

css - Susy 网格 - 在拆分时增加外部容器间距

c# - 是否有一种*干净*的方法可以使只读依赖属性反射(reflect)另一个属性的值?