Я в настоящее время изучаю, как сделать усовершенствованное использование WPF через Призму (Составной WPF) проектом.
Я смотрю много видео и примеров и демонстрационное приложение, которое StockTraderRI заставляет меня задать этому вопросу:
Какова точная роль каждой следующей части?
Я видел, что Предъявитель и Контроллер не необходимы, но я хотел бы понять, почему они здесь. Кто-то может сказать мне их роль и когда использовать их?
У меня была точно такая же проблема , когда я впервые прошел через Prism.
Контроллеры
в основном предназначены для логики, охватывающей весь модуль, тогда как Презентаторы
предназначены для логики, специфичной для представления
.
Например, Presenter
будет реагировать на команду, которая приводит к отключению кнопки в представлении. Контроллер
будет отвечать на команду, которая приводит к полному изменению View
(и Presenter
)) или, возможно, к загрузке другого View / Presenter в другом регионе. в оболочке модуля.
Изменить: Что касается того, когда их использовать, вы можете полностью пропустить Контроллер
, если вам не нужна оркестровка, упомянутая выше. В простейшем приложении будет просто:
Модуль
: регистрирует представление / презентатор в Регион
Презентатор
: отвечает на команды из представления и изменяет ViewModel
]. ViewModel
: адаптер между Presenter
и View
, реализующий INotifyPropertyChanged
View
: привязывается к ViewModel
и отображает Пользовательский интерфейс Редактировать: Что касается Presenter vs ViewModel, большая часть вашей логики должна быть в вашем Presenter. Думайте о вашей ViewModel как о размещении логики для вашего представления, а Presenter как о последствиях взаимодействия с представлением.
Например, пользователь нажимает кнопку «Поиск» в вашем просмотре
. Это вызывает ICommand
, которая обрабатывается вашим Presenter
. Presenter
начинает поиск и устанавливает свойство ViewModel.IsSearching
, которое запускает уведомление PropertyChanged для CanSearch
. CanSearch
- это свойство только для чтения, основанное на нескольких других свойствах (например, IsSearchEnabled &&! IsSearching
). Кнопка «Поиск» в представлении
имеет свойство Включено
, привязанное к CanSearch
.
На мой взгляд, здесь под Контроллером понимается Контроллер приложений