2016-09-21 27 views
0

在WPF應用程序中,如果我有一個可觀察的集合顯示在網格/列表視圖。用戶可以請求過濾一組預定義的規則。什麼是更好的性能明智的:什麼是更好的性能明智:可見性轉換器VS更改整個源

  1. 對於每個項目添加一個綁定到其知名度與轉換器
  2. 或改變整個源是過濾收集。

我不希望轉換器做任何邏輯 - 它可能是一個簡單的檢查,我已經完成了視圖模型中的過濾器。 我沒有任何代碼,因爲我想了解什麼更好,然後實現它。

+2

[?這是更快(https://ericlippert.com/2012/12/17/性能咆哮/) –

+1

@Maya S我的建議是在你的風格中使用觸發器。並通過定義好的DataTrigger管理listboxitem的可見性。通過這種方式,你不會通過收集物品(比如過濾收集的物品),也不需要任何轉換器。讓我知道你是否需要一個例子。 – Ilan

+0

@Ilan感謝您的評論。這是我的選擇之一,但通過轉換器與觸發器之間的網絡搜索 - 大多數文章表明轉換器更好。這就是爲什麼我期待在這兩者之間做出決定,因爲我需要最佳表現。 –

回答

4

我認爲最好的方法來做你想實現的是使用CollectionViewSource。

var view = new CollectionViewSource(); 
view.Filter += Filter; 
view.Source = source; 

void Filter(object sender, FilterEventArgs e) 
{ 
    if (e.Item != null) 
     e.Accepted = false; //condition here   
} 

CollectionViewSource:https://msdn.microsoft.com/fr-fr/library/system.windows.data.collectionviewsource(v=vs.110).aspx

你可以找到有一個例子:

https://stackoverflow.com/a/9618387/5703316

+0

從我的理解CollectionViewSource是一個控件,對不對?不幸的是,我無法更改應用程序使用的控件。感謝您的回覆,不知道這個控制。 –

+0

經過一番研究,我發現[這個問題](http://stackoverflow.com/questions/1280704/how-can-i-sort-a-listbox-using-only-xaml-and-no-code-behind ),解決方案是像您所建議的那樣使用CollectionViewSource - 但將其作爲靜態資源,然後將其用作綁定到網格/列表的源。我會接受這個答案 –

相關問題