Найти в Дзене

Создание WPF-коллекций с переменным числом элементов. Шаблон элемента ItemTemplate.

Оглавление

Всем привет! Как и обещал в предыдущей статье, рассказываю, как создать список элементов, среди которых можно отметить галочкой нужные, и сделать с ними определённые действия.

Введение

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

Задача

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

Решение

У нас есть полностью готовая ViewModel, дескрипторы для уровней, и команда для запуска. Осталось только сделать другое окно. Для этого я использую класс ListView, и переопределю отображение элементов этого списка.

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

Выглядит это так:

На строках 19-26 мы переопределили шаблон, просто добавив туда CheckBox и настроив привязки.

Благодаря тому, что на 8 строке мы задали контекст данных в виде нашей ViewModel, VisualStudio видит нужные свойства и подсказывает нам при выборе привязки:

-2

Причём подсказывает она, не предлагая нам свойства основной ViewModel, а именно свойства класса LevelDescriptor, потому что ItemSource у нас задан как коллекция LevelDescriptor.

Результат

-3

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

Итоговый код в моём репозитории на GitHub.

На этом всё. Не забывайте подписываться на мой телеграм-канал о Revit API и до новых встреч!

-4