【发布时间】:2011-07-11 17:07:26
【问题描述】:
我有一个包含多行的网格。我想根据属性隐藏/显示其中一个行。那可能吗?
就我而言,我有两个网格行。一个有一个属性网格,另一个有一个列表框。列表框绑定到一个对象,列表项绑定到该对象内的一个数组。我想要的是在数组为空时隐藏行(包括列表框)。因此,当我的对象数组为空时,您应该只看到一个带有属性网格的窗口,而没有其他内容。
谢谢!
【问题讨论】:
我有一个包含多行的网格。我想根据属性隐藏/显示其中一个行。那可能吗?
就我而言,我有两个网格行。一个有一个属性网格,另一个有一个列表框。列表框绑定到一个对象,列表项绑定到该对象内的一个数组。我想要的是在数组为空时隐藏行(包括列表框)。因此,当我的对象数组为空时,您应该只看到一个带有属性网格的窗口,而没有其他内容。
谢谢!
【问题讨论】:
是的。将 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}}"/>
【讨论】:
这是一个仅限 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>
【讨论】: