Prism TreeViewSample часть 1

C#

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

Эта статья предназначена для людей с базовыми знаниями в области программирования на C# для создания приложения WPF в шаблоне MVVM с использованием Visual Studio 2022 Community Edition с .Net Framework 4.6 или выше и C#.

Что такое Prism?

Создание приложения с шаблоном MVVM с использованием Prism освобождает вас от необходимости писать подобный код снова и снова. Это также упрощает создание экранов, которые динамически загружаются и переключаются между различными компонентами пользовательского интерфейса, такими как на рис.1.

Prism TreeViewSample часть 1

рис.1 Изображение приложения для создания с помощью Prism

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

Основные термины Prism

Прежде всего, мы рассмотрим самые основные термины Prism.

Shell(Оболочка)

Оболочка ссылается на окно, в которое должен быть загружен модуль. Например, в приложении Windows Form вы можете представить его как стартовую форму (проект). Его часто называют оболочкой, имея в виду главное окно или запускаемый проект.

Module(Модуль)

Модуль — это функциональный модульный пакет, который может быть независимо разработан, протестирован и распространен по мере необходимости. Многие примеры, включенные в официальный образец, относятся к проекту DLL, который содержит представление(View), загружаемое в оболочку(Shell).

Region(Регион)

Указывает на элемент управления контейнером, в который должно быть загружено представление. Как описано ниже, когда вы указываете RegionName в XAML, он будет управляться и идентифицироваться внутри Prism. Регион может быть указан только в стандарте Prism для ContentControl, но вы также можете указать другие элементы управления.

Bootstrapper (Начальный загрузчик)

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

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

Официальные шаблоны Prism

Отныне мы будем использовать официальные шаблоны Prism, но вам не нужно заранее устанавливать Prism Template Pack. Он будет установлен с помощью [Nuget Package Restore] при открытии каждого проекта. Если вы хотите установить Prism Template Pack , скачайте  его по ссылке ниже.

Prism Template Pack

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

Прежде всего, пожалуйста, получите официальный образец Prism с GitHub по ссылке.(Мы не будем показывать вам, как получить исходный код с GitHub здесь) Ниже приведен обзор всех шаблонов.

Prism Samples WPF

Примеры, демонстрирующие, как использовать различные функции Prism с WPF. Если вы только начинаете работать с Prism, рекомендуется начать с первого примера и последовательно продвигаться по списку (по порядку). Каждый образец основывается на концепции предыдущего образца.

Тема Описание
Загрузчик и оболочка Создайте базовый загрузчик и оболочку
Регионы Создайте регион
Пользовательский адаптер региона Создайте пользовательский адаптер региона для StackPanel
Просмотр обнаружения Автоматическое внедрение представлений с помощью обнаружения представлений
Просмотр инъекции Добавление и удаление представлений вручную с помощью View Injection
Просмотр активации / деактивации Вручную активировать и деактивировать представления
Модули с App.config Загружайте модули с помощью файла App.config
Модули с кодом Загружайте модули с помощью кода
Модули с каталогом Загрузка модулей из каталога
Модули, загруженные вручную Загружайте модули вручную с помощью IModuleManager
ViewModelLocator использование ViewModelLocator
ViewModelLocator — соглашение об изменении Измените соглашения об именовании ViewModelLocator
ViewModelLocator — пользовательские регистрации Вручную регистрируйте ViewModels для определенных представлений
Делегировать команду Используйте DelegateCommand и DelegateCommand<T>
CompositeCommands Узнайте, как использовать CompositeCommands для вызова нескольких команд как одной команды
Команды IActiveAware Сделайте ваши команды IActiveAware для вызова только активной команды
Агрегатор событий Использование IEventAggregator
Агрегатор событий — фильтровать события Фильтрация событий при подписке на события
RegionContext Передача данных во вложенные области с помощью RegionContext
Навигация по регионам Смотрите, как реализовать базовую навигацию по регионам
Обратный вызов навигации Получать уведомления по завершении навигации
Участие в навигации Узнайте об участии в навигации View и ViewModel с помощью INavigationAware
Перейдите к существующим представлениям Управляйте экземплярами просмотра во время навигации
Передача параметров Передача параметров из View / ViewModel в другой View / ViewModel
Подтверждение / отмена навигации Используйте интерфейс IConfirmNavigationReqest для подтверждения или отмены навигации
Управление временем жизни представления Автоматическое удаление представлений из памяти с помощью IRegionMemberLifetime
Журнал навигации Узнайте, как использовать журнал навигации
Интерактивность — InvokeCommandAction Вызывать команды в ответ на любое событие

Шаги необходимые для запуска официального шаблона Prism

Сначала откройте решение непосредственно в разделе «14-USINGEVENTAGGREGATOR» в загруженном вами официальном образце. При запуске Visual Studio щелкните правой кнопкой мыши решение в Обозревателе решений и выберите либо «Восстановить пакет NuGet», либо «Управлять пакетами NuGet для решения», чтобы получить необходимые компоненты из NuGet.

Prism TreeViewSample часть 1

рис.2. Восстановление пакета Nuget

 

Официальный образец конфигурации Prism “14-UsingEventAggregator”

После этого, когда вы создаете и запускаете его, отображается главное окно (shell). Вы также можете запустить описанный выше метод в проектах, отличных от описанного здесь «14-UsingEventAggregator», чтобы устранить ошибку.

 

Prism TreeViewSample часть 1

На рисунке показана конфигурация решения «14-UsingEventAggregator».

Проект ModuleA

Модуль, содержащий представление, которое будет загружено слева от оболочки.

Проект ModuleB

Модуль, содержащий представление, которое будет загружено справа от оболочки.

 

Оболочка Prism и точка входа (Prism 8.0)

Точка входа приложения, это файл App.xaml.cs. (Он будет сгенерирован автоматически)

Строки с 1 по 14 являются автоматически сгенерированными частями шаблона Prism. Строки 16-21 определяют переопределенный метод для загрузки в приложение отдельных модулей.

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

Учитывая фактическую работу, администратор считает, что метод размещения его в каталоге и автоматической регистрации является наиболее подходящим, но я не буду здесь объяснять. Если вы хотите загрузить модули в каталог и зарегистрировать их автоматически, пожалуйста, при необходимости обратитесь к «07-Modules – Directory» в официальном образце Prism.

 

Строка 4 — это псевдоним для пространства имен XML для использования Prism в XAML. В строке 5 указывается, следует ли использовать ViewModelLocator для связи View с ViewModel.(Если установлено значение True, имя представления будет изменено на Views.Для MainWindowViewModel для которой вы установили значение DataContext, — это ViewModels.(Это будет MainWindowViewModel)

Если вы хотите изменить связь между View и ViewModel, см. Официальный пример » 9. ViewModelLocator – Change Convention» или “ViewModelLocator – Custom Registrations”

Строки 12 и 13 определяют название региона для модуля загрузки. Определенные здесь имена регионов также используются для создания модулей.

Это конфигурация оболочки, и мы продолжим рассказывать о том, как настроить модуль для загрузки в оболочку.

Что нужно указывать при инициализации модуля Prism

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

 

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

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