У меня была точно такая же проблема , когда я впервые прошел Prism.
Controllers
в основном для логики, охватывающей весь модуль, тогда как Presenters
для логики, специфичной для View
.
Например, Presenter
будет отвечать на команду, в результате чего кнопка в представлении будет отключена. Controller
будет реагировать на команду, которая приводит к полному изменению View
(и Presenter
) или, возможно, загрузке другого View / Presenter в другой области оболочки модуля.
Редактировать: Что касается того, когда их использовать, вы можете полностью пропустить Controller
, если вам не нужна упомянутая выше оркестровка. Самое простое приложение будет просто иметь:
Module
: регистрирует представление / докладчик в Region
Presenter
: отвечает на команды из представления и изменяет ViewModel
.
ViewModel
: адаптер между Presenter
и View
, который реализует INotifyPropertyChanged
View
: привязывается к ViewModel
и отображает пользовательский интерфейс
Редактировать: Что касается Presenter и ViewModel, большая часть вашей логики должна быть в Presenter. Представьте, что ваша ViewModel содержит в себе логику вашего представления, а Presenter рассматривает последствия взаимодействия с представлением.
Например, пользователь нажимает кнопку «Поиск» в вашем View
. Это вызывает ICommand
, который обрабатывается вашим Presenter
. Presenter
начинает поиск и устанавливает свойство ViewModel.IsSearching
, которое запускает уведомление PropertyChanged для CanSearch
. CanSearch
- это свойство только для чтения, которое основано на нескольких других свойствах (например, IsSearchEnabled && !IsSearching
). Кнопка «Поиск» в View
имеет свойство Enabled
, привязанное к CanSearch
.