2009-07-10 3 views
1

У меня есть сетка, которая имеет несколько строк. Я хочу скрыть/показать одну из этих строк на основе свойства. Это возможно?Показать/скрыть строку сетки на основе свойства?

В моем случае у меня есть две строки сетки. У одного есть сетка свойств, а у другого - список. Поле списка привязано к объекту, и элементы списка привязаны к массиву внутри этого объекта. Я хочу, чтобы скрыть строку (включая поле списка), когда массив пуст. Поэтому, когда массив моего объекта пуст, вы должны просто увидеть окно с сеткой свойств и ничего больше.

Спасибо!

ответ

3

Да. Привяжите свойство видимости ListBox к объекту, содержащему массив. Затем примените настраиваемый преобразователь значений, который будет смотреть на массив и посмотреть, пуст ли он. Если он пуст, верните 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}}"/> 
+0

Это решение работает на меня! – djcouchycouch

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> 
Смежные вопросы