Проблема real , которую вы должны исправить, заключается в производительности фильтра CollectionView, а не в реализации вложенных фильтров путем передачи вновь отфильтрованного списка в качестве исходной коллекции в следующий фильтр.
Метод сбора вложенных фильтров / источников обратной связи, который вы «хотите», вызовет проблемы, когда пользователь выполнит несколько попыток ввода и удаления символов, поскольку тогда вы не будете уверены, какая коллекция источников применяется к этому тексту фильтра.
Например, у нас 100 сотрудников, и мы фильтруем их, набирая «Имя сотрудника» как «A» ... В этом списке 50 сотрудников с именами, начинающимися с «A».Теперь мы продолжаем набирать «H» ... 10 сотрудников из тех, чьи имена начинаются с «AH», фильтруются.Но теперь мы удаляем"H", в идеале для поиска нового списка сотрудников следует использовать 100 сотрудников, но при этом будет задействовано 10 сотрудников, поскольку они возвращаются во вложенный процесс фильтрации.
Представьте, насколько это будет сложно, если кто-то часто печатает и удаляет случайные символы из отфильтрованного текста!
Таким образом, основное правило - Вы должны фильтровать всю коллекцию источников
Как только мы узнаем это сейчас, мы можем попытаться улучшить функциональность фильтра ...
Используйте LINQ и присвойте результат для ItemsSource DataGrid для каждого напечатанного символа.Они отлично работают для больших коллекций (у меня была одна такая сетка данных с 300 тысячами строк, и я использовал LINQ для быстрой фильтрации).
LINQ может работать в фоновом потоке и повторно применять результат кItemsSource таблицы данных.
Если в .Net 4.0, LINQ предлагает вызовы AsParallel ().Очень эффективный.Для фильтрации используется ограниченное количество потоков в пуле.
LINQ также предлагает интерфейс AsQueryable () для поиска по имени свойства строки.