Создание списков (ListView). Поиск и фильтрация данных
Программные решения для бизнеса
“
Поговорим об альтернативном варианте: элементе ListView. Узнаем, какой способ для отображения данных он предлагает, и познакомимся с его ключевыми механизмами.
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Метод
Method. Функция или процедура, принадлежащая какому-то классу или объекту, состоящая из некоторого количества операторов для выполнения какого-то действия и имеющая набор входных аргументов
Привязка данных
Binding. Процесс, который устанавливает соединение между UI (пользовательским интерфейсом) приложения и бизнес-логикой
Элемент управления
Control. Элемент, который предназначен для взаимодействия с пользователем или для отображения ему какой-либо информации
Событие
Event. Сообщение, которое возникает в различных точках исполняемого кода при выполнении определенных условий
Класс
Class. Элемент программного обеспечения, описывающий абстрактный тип данных и его частичную или полную реализацию
Видеолекция
Конспект
Продолжим разработку настольного приложения и поговорим об альтернативном DataGrid’у элементе, который может отображать информацию из базы данных — ListView. Как правило, он представляет собой стандартный список. Однако при желании вы можете сделать сложную компоновку объекта, которую не получилось бы реализовать с помощью DataGrid. Также можно вывести элементы не только построчно, но и, например, плитками, реализовать поиск и фильтрацию информации.
Вывод информации о турах с ListView
Для вывода информации о турах добавляем новую страницу с ListView
Переходим на нее сразу после инициализации компонентов MainWindow
Для вывода информации о турах добавляем новую страницу с ListView
Переходим на нее сразу после инициализации компонентов MainWindow

Подготавливаем разметку грида — это две строки

Добавляем элемент ListView, размечаем в гриде и задаем имя

Для вывода информации о туре создается шаблон элемента в списке — то представление, которое должно отображаться для каждого элемента
Создаем шаблон и размечаем его грид, указав при этом размер строк

Добавляем в ресурсы изображение, которое будем выводить при отсутствии картинки у тура

Добавляем изображение тура в верстку, установив необходимые атрибуты

Теперь задаем объекты для привязки, а также изображение, если изображения тура не будет

Добавляем текстовые поля для наименования, указав: перенос текста, выравнивание, большой шрифт; для стоимости, указав: выравнивание, также большой шрифт, но делаем текст жирным; количество билетов — выравниваем по правому краю; и актуальности — выравниваем по левому краю

Добавляем привязки для наименования, стоимости, количества билетов и актуальности

Загружаем коллекцию «список» в коде

Далее — Далее — Финиш. 252 строки было импортировано. Можем их увидеть в таблице
В чем у нас ошибка? Мы не загрузили туры в список — наш ListView

Запускаем приложение еще раз

Работаем над форматом отображения стоимости и количества билетов. Указываем им StringFormat формат для указания цены (два знака после запятой) и примечание к количеству билетов. Делать это можно прямо во время запуска приложения

Для отображения актуальности делаем дополнительное свойство в классе Тур — назовем его ActualText

Выполняем привязку

Теперь изменяем представление ListView на плитку. У нас в качестве ItemsPanel будет находиться RowPanel, который позволяет нам переносить элементы в виде плиток. И не забываем убрать горизонтальную прокрутку в ListView

Реализация поиска и фильтрации информации
Как говорилось ранее, для работы с большими объемами информации полезно реализовать поиск и фильтрацию. Как это работает? Пользователь вводит в специальные элементы управления данные для поиска или выбирает категории из списка для фильтрации. Затем в коде разработчик приводит коллекцию данных к виду, который соответствует поиску, и загружает результаты в ListView. Давайте сделаем это.
Для начала необходимо подготовить внешний вид страницы. Добавляем элементы для поиска и фильтрации. Для поиска это будет TextBox, для фильтрации — ComboBox, который представляет собой выпадающий список объектов. Обязательно даем подсказки, чтобы пользователь знал, что именно вводить. И устанавливаем атрибуты, например, на выравнивание и размеры. Также указываем, какое поле отображать для ComboBox, и добавляем Checkbox для отображения только актуальных туров. Делать это мы будем также в RowPanel, чтобы переносить элементы при изменениях размера экрана
Для начала необходимо подготовить внешний вид страницы. Добавляем элементы для поиска и фильтрации. Для поиска это будет TextBox, для фильтрации — ComboBox, который представляет собой выпадающий список объектов. Обязательно даем подсказки, чтобы пользователь знал, что именно вводить. И устанавливаем атрибуты, например, на выравнивание и размеры. Также указываем, какое поле отображать для ComboBox, и добавляем Checkbox для отображения только актуальных туров. Делать это мы будем также в RowPanel, чтобы переносить элементы при изменениях размера экрана

В плане удобства использования наиболее выигрышно выглядит механизм, когда результаты поиска выводятся сразу по мере ввода ключевого слова или выбора значения в выпадающем списке. Поэтому мы обработаем соответствующие события на каждый элемент
Во-первых, это TextChanged на изменение текста для поиска.
TextBox — Search — TextChanged
TextBox — Search — TextChanged

Затем при изменении выбора в выпадающем списке — Selection Changed

После этого мы добавляем обработку нажатия и снятия флажка у CheckBox

Загружаем данные в ComboBox, добавив элемент «все типы». Делается это в коде

Устанавливаем стартовые значения для элементов управления: CheckBox и ComboBox

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

Выполняем фильтрацию, поиск и сортировку. После этого загружаем полученные результаты в коллекцию

Вызываем этот метод в каждом обработчике элементов управления и при запуске страницы


“
ListView предлагает более гибкий способ для отображения данных, с которыми можно взаимодействовать так же, как и с Data Grid. Кроме того, методы поиска и фильтрации значительно упрощают процесс выборки информации, что повышает удобство пользования программой.
А теперь предлагаем вам проверить полученные знания на практике.
А теперь предлагаем вам проверить полученные знания на практике.
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем! |
WPF. Что представляет собой ListView?
Дальше |
Проверить |
Узнать результат |
WPF. Загрузка данных в ListView осуществляется при помощи свойства…
Дальше |
Проверить |
Узнать результат |
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз |
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз |
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз |