2010-06-04 47 views
2

我在WPF中使用過濾器,我遵循建議的模式here。總之,這涉及在ViewModel上暴露的文本屬性,該文本屬性表示要過濾的文本。當屬性被設置時(通過視圖中文本框的綁定),它使用CollectionViewSource.GetDefaultView(MyItems).Filter = blah過濾可見的項目列表。如何在後臺線程上執行WPF過濾器?

這很好,但是當項目集合非常大時,問題就出現了,因爲篩選是在前臺線程上執行的,因此會掛起UI。 是否存在用於在後臺線程上執行過濾的模式,以及這如何適合Model-View-ViewModel模式?

回答

4

而不是使用的CollectionView過濾的,做你自己:在你的視圖模型創建一個包含過濾後的數據,一個用於保持過濾器的屬性。每當過濾器發生變化時,在單獨的線程中啓動工作項以計算新的過濾數據屬性,然後在完成時更新該屬性。在更新屬性時,可以更新現有的集合,也可以根據進行的更改進行替換。

我使用了一個類來自動執行此操作,因此它很容易將一個集合聲明爲另一個集合的過濾版本。

相關問題