Я все еще экспериментирую с разными подходами MVP, но то, как я сейчас это делаю, выглядит так:
frmName frmView = new frmName();
if (frmView.ShowDialog() == DialogResult.OK) {
presenter.RequestProcessing(frmView.Name, frmView.Address);
} else {
//Ignore cancel click..
}
Вы говорите, что хотите избежать написания какого-либо кода на самой форме, но для меня это не имеет смысла. В Пассивное представление вы передаете все специфичные для приложения запросы контроллеру или докладчику.
В этом примере представление обрабатывает связанную с представлением логику . Открытие диалогового окна не является пользовательским действием, о котором нужно знать что-либо еще (например, докладчика). Точно так же, как открытие контекстного меню, диалоговое окно является частью того, как этот конкретный вид выбирает предложение этих специфичных для приложения запросов пользователю. Пока пользователь не выполнит запрос и не отправит запрос, докладчику не нужно ничего знать.
В некоторых случаях, когда мне нужно было иметь возможность обрабатывать ошибки в самом диалоговом окне, я передавал объект IPresenter
в конструктор диалогового окна. Затем он может сам сделать соответствующий запрос докладчика, например, при нажатии кнопки «ОК», и может показать окно сообщения вместо закрытия в случае ошибки.
Существует множество вариантов MVP, но я надеюсь, что это поможет. Удачи в настройке.