【问题标题】:C#: How to effectively filter (hide) ListView Items while in virtual mode?C#:如何在虚拟模式下有效地过滤(隐藏)ListView 项?
【发布时间】:2009-06-11 19:01:35
【问题描述】:

C#:如何在虚拟模式下有效过滤(隐藏)ListView 项?

我正在寻找一种在虚拟模式下过滤(隐藏/显示)ListView 中的项目的方法。我将我的项目缓存在列表视图项目数组中,我怎样才能有效地做到这一点,以便在按下过滤器按钮时只显示特定的列表视图项目,然后在按下非过滤器按钮时将它们全部返回?

【问题讨论】:

    标签: c# .net wpf listview


    【解决方案1】:

    您需要映射您的可见行列表,这样当 RetrieveVirtualItem 请求一个项目时,它会请求到您的过滤列表中,该列表仅包含可见项目。

    如果您使用 CacheVirtualItems 来存储 ListViewItems,则需要在应用过滤时更新该缓存,删除所有不可见的行。您可能只想在此时清除缓存以降低复杂性。

    【讨论】:

      【解决方案2】:

      我通过向我在 ListView 中显示的对象添加属性 FilterResult 来在我的项目中执行此操作。然后在用于 ListView 的项目模板中,我在 FilterResult 上放置了一个 DataTrigger,在 Visibility 上放置了一个 Setter,类似于:

      <DataTrigger Binding="{Binding FilterResult}" Value="False">
                 <Setter Property="Visibility" Value="Collapsed" />
      </DataTrigger>
      

      然后,当用户更改过滤器时,我只需通过显示的集合,更新每个 FilterResult(这是一个 PropertyChanged 通知属性),瞧! :=)

      另一个仍然使用 FilterResult 标志的解决方案是创建一个连接到主集合的 NotifyingCollection,它只公开具有 FilterResult 为 true 的项目。因此,如果 FilterResult 的一项切换值,您必须管理 CollectionChanged 事件...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        相关资源
        最近更新 更多