C#:如何在虚拟模式下有效过滤(隐藏)ListView项目?
我正在寻找一种在虚拟模式下过滤(隐藏/显示)ListView中的项目的方法。我将我的项目缓存在listview项目数组中,我怎么能有效地制作它,所以在按下过滤器按钮时只显示特定的listview项目,然后在按下非过滤器按钮时返回所有项目?
答案 0 :(得分:2)
您需要映射可见行列表,以便在RetrieveVirtualItem请求项目时,它会向您的过滤列表中请求仅包含可见行。
如果您使用CacheVirtualItems存储ListViewItems,则在应用过滤时需要更新该缓存,删除所有不可见的行。您可能只想在那时清除缓存以降低复杂性。
答案 1 :(得分:0)
我在我的项目中通过将属性FilterResult添加到我在ListView中显示的对象来完成此操作。然后在用于ListView的项目模板中,我将一个DataTrigger放在FilterResult上,并在可见性上设置Setter,如:
<DataTrigger Binding="{Binding FilterResult}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
然后当用户更改过滤器时,我只需浏览收集的Shown,更新每个FilterResult(这是一个PropertyChanged Notifying属性)并瞧! :=)
另一个仍在使用FilterResult标志的解决方案是创建一个挂在主Collection上的NotifyingCollection,它只公开FilterResult为true的项。因此,如果一个项目切换FilterResult ...
的值,则必须管理CollectionChanged事件