Обнаружение выхода из приложения и как остановить, когда изменения не сохранены - PullRequest
2 голосов
/ 02 марта 2010

Используя инструменты составного приложения от Microsoft, кажется, что нет механизма, позволяющего запрашивать ваши модули ViewModels и спрашивать, есть ли у любого из них несохраненные данные. Это проблема, потому что, и я тоже в этом виноват, вы не можете остановить завершение работы приложения при наличии несохраненных данных ...

Я думал о создании интерфейса под названием IApplicationEvents, и у меня там было событие ApplicationExiting. Мысль состоит в том, что каждый модуль может подписаться на событие и, при срабатывании, может отправить обратно «Отмена = истина» или «Отмена = ложь», чтобы сказать, разрешить или нет приложение выйти.

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

Thx.

1 Ответ

3 голосов
/ 02 марта 2010

Здесь есть много вариантов.

Прежде всего, я хотел уточнить небольшую номенклатуру ... обычно ваши представления или ViewModels, содержащиеся в ваших сборках модуля, - это вещи с несохраненными изменениями, а не сам модуль . Модуль отвечает за создание экземпляров любых представлений, необходимых в начале, и внесение вклада обратно в оболочку во время инициализации, и это обычно так, поэтому, когда вы атакуете эту проблему, вам нужно сосредоточиться на ваших представлениях / моделях представления, а не на классах модуля.

Варианты с макушки головы:

  1. Примите дополнительную платформу, такую ​​как Caliburn , которая поддерживает такие события приложений, как это (а также некоторые события MDI, такие как ViewClosing, и тому подобное). Он имеет встроенную поддержку Prism (http://caliburn.codeplex.com/)

  2. Используйте составную команду . Ваши представления или модели представления будут регистрироваться с помощью составной команды в другом месте (CloseCommand, которую вы статически объявляете для своего приложения), и каждое открытое представление будет запускать свои методы CanExecute и Execute, чтобы вы могли как голосовать при закрытии приложения, так и реагировать к этому, должно ли это случиться так или иначе. CompositeCommands являются функцией Prism. (См .: Командный быстрый старт )

Я думаю, что они, вероятно, самые элегантные. Есть еще несколько вариантов, но они живут в лучшей гармонии с существующими соглашениями.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...