Событие фильтрации CollectionViewSource и свойство

Каковы некоторые практические различия между использованием свойства CollectionViewSource.View.Filter и событием CollectionViewSource.Filter? Есть ли ситуации, когда вы бы использовали один вместо другого, или это вопрос предпочтений?

С уважением,
Беррил

РЕДАКТИРОВАТЬ: я вижу, что в документах говорится: «Если ваш объект представления исходит из объекта CollectionViewSource, вы применяете логику фильтрации, устанавливая обработчик событий для события Filter». хотя ничто не мешает вам установить свойство в представлении, и не сказано, зачем это делать.

Преимущество, которое я обнаружил до сих пор в настройке события в CollectionViewSource, заключается в том, что вы можете реализовать всю свою логику фильтрации в одном обработчике событий, а затем использовать View.Refresh (или View.DeferRefresh) для его вызова, когда пользователь изменяет критерии фильтрации.


person Berryl    schedule 29.09.2010    source источник
comment
Вы можете найти ответ здесь: bea.stollnitz.com/blog/?p=31 Рекомендую прочитать другие ее посты о collectionview :)   -  person Bruno    schedule 12.04.2011


Ответы (1)


Установка события Filter в CollectionViewSource будет означать, что событие вызывается, даже если фильтрация не требуется, что сделает процесс менее эффективным.

Официальный способ использования события Filter заключается в добавлении его при фильтрации и удалении позже, когда фильтр очищается.

viewsource.Filter += viewsource_Filter;

Затем:

viewsource.Filter -= viewsource_Filter; //откуда вы знаете, сколько событий!?

Если вы используете событие, вы должны убедиться, что вы не добавляете событие каждый раз, когда значение фильтра изменяется, потому что, помимо того, что вокруг скрываются избыточные события (= приложение работает больше ни за что), вам придется удалить все события в чтобы очистить фильтр.

Таким образом, есть преимущество в использовании свойства Filter, поскольку фильтр можно легче очистить, установив для свойства значение null.

viewsource.view.Filter = null;

person E Mett    schedule 05.11.2015