Паттерн MVP@WinForms: как во View понять, были ли изменения в данных?
Дано: приложение на C# WinForms, которое пытается следовать паттерну MVP.
View представляет собой форму с гридом, в гриде есть данные. Также есть конпочки, которые с этими данными что-то делают. View не знает, что. Он просто генерит по нажатию кнопок события, которые обрабатываются презентером.
Задача: при закрытии формы необходимо понять, были ли изменения в данных, и если были, то спросить, сохранять ли их.
Варианты, которые приходят в голову (но ни один из них не нравится):
1. По нажатию кнопок сделать вывод, что данные поменялись.
2. Спрашивать о сохранении из презентера.
3. Генерировать событие типа «а не было ли изменений?», но разумных идей по поводу аргументов и названия этого события в голову не приходит.
Отображение диалога — ответственность View. Были ли изменения в данных — знает Presenter.
То есть в событии закрытия формы View должна вызвать некий метод Presenter, чтобы узнать, были ли изменения, затем показать диалог, если они были.
Тут есть нюанс: View ничего не знает о Presenter. Их взаимодействие строится исключительно через обращение Presenter к интерфейсу IView (в том числе подписка на события IView). На данный момент появился такой вариант:
IView предоставляет событие EventHandler Close и метод ShowSaveDialog.
Presenter в случае, если есть изменения в данных, толкает ShowSaveDialog и в зависимости от DialogResult сохраняет/не сохраняет/отменяет закрытие.