2009-07-10 55 views
1

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

在我的情况,我有两个网格行。一个有一个属性网格,另一个有一个列表框。列表框绑定到一个对象,列表项绑定到该对象内的数组。我想要的是在数组为空时隐藏该行(包括列表框)。所以当我的对象的数组是空的时候,你应该只看到一个带有属性网格的窗口,而没有其他东西。

谢谢!

回答

3

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

而且你的XAML应该是这个样子:

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

该解决方案对我的作品! – djcouchycouch 2009-07-15 12:47:13

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>