簡體   English   中英

C#:如何在虛擬模式下有效過濾(隱藏)ListView項目?

[英]C#: How to effectively filter (hide) ListView Items while in virtual mode?

C#:如何在虛擬模式下有效過濾(隱藏)ListView項目?

我正在尋找一種在虛擬模式下過濾(隱藏/顯示)ListView中的項目的方法。 我將我的項目緩存在listview項目的數組中,我怎樣才能有效地制作它,以便在按下過濾器按鈕時只顯示特定的列表視圖項目,然后在按下非過濾器按鈕時返回所有項目?

您需要映射可見行列表,以便在RetrieveVirtualItem請求項目時,它會向您的篩選列表請求僅包含可見行。

如果您使用CacheVirtualItems來存儲ListViewItems,則在應用過濾時需要更新該緩存,刪除所有不可見的行。 您可能希望在此時清除緩存以降低復雜性。

我在我的項目中通過將屬性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事件...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM