Как я могу выполнить фильтры WPF в фоновом потоке? - PullRequest
3 голосов
/ 04 июня 2010

Я использую фильтры в WPF и следую предложенной схеме здесь .

Подводя итог, можно сказать, что в ViewModel отображается текстовое свойство, представляющее текст для фильтрации. Когда свойство установлено (с помощью привязки из текстового поля в представлении), оно использует CollectionViewSource.GetDefaultView(MyItems).Filter = blah для фильтрации видимого списка элементов.

Это прекрасно работает, но проблема возникает, когда набор элементов очень большой, так как фильтрация выполняется в потоке переднего плана и, таким образом, зависает пользовательский интерфейс. Существует ли шаблон для выполнения фильтрации в фоновом потоке, и как он вписывается в шаблон Model-View-ViewModel?

1 Ответ

4 голосов
/ 05 июня 2010

Вместо использования CollectionView для фильтрации, сделайте свое собственное: в вашей ViewModel создайте свойство, которое содержит отфильтрованные данные и одно для хранения фильтра. Всякий раз, когда фильтр изменяется, запускайте рабочий элемент в отдельном потоке, чтобы вычислить новое свойство отфильтрованных данных, а затем обновите это свойство, когда это будет сделано. При обновлении свойства либо обновите существующую коллекцию, либо замените ее в зависимости от того, сколько изменений было внесено.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...