【问题标题】:Show/Hide a grid row based on a property?根据属性显示/隐藏网格行?
【发布时间】:2011-07-11 17:07:26
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: c# wpf grid


    【解决方案1】:

    是的。将 ListBox 的 Visibility 属性绑定到包含该数组的对象。然后应用一个自定义值转换器,它将查看数组并查看它是否为空。如果为空,则返回 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}}"/>
    

    【讨论】:

      【解决方案2】:

      这是一个仅限 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-14
        • 1970-01-01
        相关资源
        最近更新 更多