Как выполнить фильтры WPF в фоновом потоке?

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

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

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


person Community    schedule 04.06.2010    source источник


Ответы (1)


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

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

person Community    schedule 05.06.2010