2009-07-10 52 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>