2016-02-17 5 views
1

У меня есть следующая проблема. Мой ListView имеет серый фон, и когда ListView пуст, вы можете увидеть небольшую серая линия в окне. Это выглядит уродливым, поэтому я хочу скрыть весь ListView, когда он пуст, чтобы этого избежать.Есть ли способ скрыть ListView в xaml?

Я искал, если для этого есть свойство стиля, но единственным, что я нашел, является скрытие ListViewItem или ListViewHeader. У кого-то есть идея решить это, должно быть что-то.

+0

У вас может быть триггер стиля, чтобы либо установить видимость на свернутое, либо установить высоту списка для 0 пикселей. Оба будут иметь тот же эффект – adminSoftDK

ответ

2

Создайте Converter, который возвращает Visibility.Collapsed, когда ваша коллекция ItemsSource пуста.

Например:

<ListView ItemSource="{Binding MyCollection}" Visibility="{Binding MyCollection, Converter={StaticResource EmptyCollectionConverter}}"/> 

Ваша реализация IValueConverter.Convert() будет выглядеть примерно так:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var coll = value as IEnumerable<object>; 
    return (coll.Count() > 0) ? Visibility.Visible : Visibility.Collapsed; 
} 

UPDATE: Из another answer о том, как привязать к Collection.Count с использованием стиля:

<YourControl.Style>      
    <Style TargetType="YourControl"> 
    <Setter Property="Visibility" Value="Collapsed" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding MyList.Count}" Value="0"> 
      <Setter Property="Visibility" Value="Visible" /> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</YourControl.Style> 
+0

Спасибо за быстрый ответ, это правильная вещь, которую я хочу сделать. Считаете ли вы возможным решить эту проблему и в xaml с