2016-09-21 2 views
0

В приложении WPF, если у меня есть наблюдаемая коллекция, отображаемая в виде сетки/списка. И пользователь может запросить фильтрацию того, что видно по предопределенному набору правил. Что было бы лучше производительность мудрая:Что лучше с точки зрения производительности: конвертер видимости VS, изменяющий весь источник

  1. Для каждого элемента, чтобы добавить привязку к его видимости с преобразователем
  2. Или изменить весь источник, чтобы быть отфильтрованной коллекцией.

Я не хочу, чтобы конвертер выполнял какую-либо логику - это, вероятно, будет простая проверка после того, как я уже сделал фильтр в модели представления. У меня нет кода, потому что я хочу понять, что лучше, а затем реализовать это.

+2

[? Что быстрее] (https://ericlippert.com/2012/12/17/ performance-rant /) –

+1

@Maya S Мое предложение - использовать триггер в вашем стиле. и управлять видимостью listboxitem с помощью корректного DataTrigger. Таким образом, вы не будете проходить через коллекцию элемента (например, в случае фильтрованной коллекции), и нет необходимости в каких-либо конвертерах. Дайте мне знать, если вам нужен пример. – Ilan

+0

@Ilan Спасибо за комментарий. Это был один из моих вариантов, но при поиске в Интернете между конвертером и триггером большинство статей предполагало, что преобразователи лучше. Вот почему я ищу решение между этими 2, так как мне нужна лучшая производительность. –

ответ

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, как вы предполагали, но как статический ресурс, а затем использовать его как связующее звено с сеткой/списком. Я приму этот ответ –

Смежные вопросы