Поиск, группирование элементов ListBox с помощью CollectionViewSource

C#

В этой статье мы рассмотрим, как выполнять поиск и фильтрацию элементов в ListBox WPF с помощью CollectionViewSource. Мы начнем с обсуждения функциональных возможностей CollectionViewSource, а затем приведем пример его работы. Затем мы будем использовать его для поиска, а также для группировки элементов в ListBox. Этот пример может быть применен к другим элементам управления WPF, таким как ComboBox, DataGrid и т.д., Так что вы можете легко применить тот же подход, если это необходимо!

Определение CollectionViewSource

CollectionViewSource — это мощный инструмент, который позволяет нам отделять исходную коллекцию от представления и манипулировать ею без изменения фактической коллекции. Такое разделение источника и представления предотвращает неожиданные изменения в наших данных, позволяя нам привязывать одну и ту же коллекцию источников к нескольким представлениям. Свойство View CollectionViewSource дает разработчикам полный контроль над тем, как они хотят представлять свои данные, что делает его бесценным ресурсом для любого проекта, где требуется несколько представлений для одного набора данных.

Примеры поиска и группировки

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

Поиск, группирование элементов ListBox с помощью CollectionViewSource

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

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

Шаги по созданию поиска и группировки

Создадим MainWindow.xaml. наше представление.

В приведенном выше коде XAML есть ListBox и ListView, но вы можете использовать любой элемент управления, производный от ItemsControl. Первый используется для фильтрации элементов, а второй — для их группировки.

Используя связанный элемент управления таким образом (в этом примере используется ListView), вы можете изменить порядок данных, чтобы отразить как группировку, так и правила фильтрации, а также порядок сортировки. К сожалению, по умолчанию визуальная индикация этой группировки недоступна; однако здесь был определен GroupStyle, чтобы обеспечить желаемые заголовки. Обратите внимание, что указанное здесь свойство Name точно не называет группу — оно относится к PriorityClass, который фактически формулирует группировку данных.

 

Теперь переходим к классу ViewModel. Пожалуйста, проверьте приведенный ниже код.

В приведенном выше коде подробно описаны шаги для получения списка всех процессов в системе и привязки его к объекту ObservableCollection с именем AllProcess. Два экземпляра CollectionViewSource были созданы в конструкторе класса — FirstCollectionViewSource и SecondCollectionViewSource — которые являются свойствами типа ICollectionView, что предотвращает прямое изменение исходной коллекции.

Затем два свойства привязываются к соответствующим ListBox в файле.xaml. Кроме того, SecondCollectionViewSource имеет GroupDescription, назначенную его свойству PriorityLevel, которое является частью класса Process.

FirstCollectionViewSource оснащен фильтром для свойства FirstSearchText. Это свойство привязано к элементу управления TextBox, который находит все процессы, имена которых содержат введенный текст. Фильтр работает, принимая делегат-предикат, поэтому мы настроили функцию DoesCollectionContainName для перебора каждого элемента коллекции и возврата тех элементов, которые удовлетворяют условию.

Когда вы запустите это приложение, вы увидите, как работает CollectionViewSource на практике.

Вывод

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

Добавить комментарий