有没有办法在 xaml 中隐藏 ListView?
Posted
技术标签:
【中文标题】有没有办法在 xaml 中隐藏 ListView?【英文标题】:Is there a way to hide a ListView in xaml? 【发布时间】:2016-05-29 06:01:32 【问题描述】:我有以下问题。我的 ListView 的背景是灰色的,当 ListView 为空时,您可以在窗口上看到一条小灰线。这看起来很难看,所以我想在 ListView 为空时隐藏整个 ListView 以避免这种情况。
我搜索了是否有样式属性来执行此操作,但我发现的唯一内容是如何隐藏 ListViewItem 或 ListViewHeader。有人有解决这个问题的想法,必须有一些东西。
【问题讨论】:
您可以使用样式触发器,将可见性设置为折叠状态,或将列表框的高度设置为 0 像素。两者将具有相同的效果 【参考方案1】:创建一个Converter
,当您的ItemsSource
引用的集合为空时返回Visibility.Collapsed
。
例如:
<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;
更新:来自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>
【讨论】:
感谢您的快速回复,这是我想做的正确事情。你认为用if(coll != null) return ...
您的第二个答案正是我想要的。我会将其标记为我的答案,因为它比另一个更详细。【参考方案2】:
<ListView ItemSource="Binding MyCollection">
<ListView.Style>
<Style TargetType="ListView">
<Style.Triggers>
<Trigger Property="HasItems" Value="False">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</ListView.Style>
...
</ListView>
【讨论】:
以上是关于有没有办法在 xaml 中隐藏 ListView?的主要内容,如果未能解决你的问题,请参考以下文章