2010-03-01 6 views
2

En utilisant les outils de guidage d'application composite de Microsoft, il semble qu'il n'y ait aucun mécanisme permettant d'interroger vos modules ViewModels et de vous demander si l'un d'entre eux n'a pas été sauvegardé Les données. C'est un problème parce que, et je suis coupable de cela aussi, vous ne pouvez pas arrêter l'application de se terminer quand il y a des données non sauvegardées ...Détection de la sortie de l'application et arrêt lorsque les modifications ne sont pas enregistrées

J'avais pensé à créer une interface appelée IApplicationEvents et avoir un événement là-bas appelé ApplicationExiting. L'idée étant que chaque module peut s'abonner à l'événement et, une fois renvoyé, il peut renvoyer un "Cancel = true" ou "Cancel = false" pour indiquer s'il faut ou non autoriser la sortie de l'application. Il est curieux de découvrir ce que d'autres ont pu faire dans ce cas et de voir quelles sont les solutions possibles dans la communauté pour résoudre ce problème.

Thx.

Répondre

3

Il y a beaucoup de choix ici. Tout d'abord, je voulais clarifier une petite nomenclature ... généralement vos Views ou ViewModels contenus dans vos assemblys de modules sont les choses avec des changements non sauvegardés, pas le module lui-même. Le module est responsable de l'instanciation des vues nécessaires au démarrage et du retour au shell pendant l'initialisation et c'est typiquement le cas, donc lorsque vous attaquez ce problème, vous devez vous concentrer sur vos vues/viewmodels et non sur les classes Module.

options du haut de ma tête:

  1. adopter un cadre gratuit comme Caliburn qui a le soutien pour les événements d'application comme celle-ci (ainsi que certains événements MDI comme ViewClosing, ce genre de choses) . Il a intégré le support pour Prism (http://caliburn.codeplex.com/)

  2. Utilisez une commande composite. Vos vues ou viewmodels vont s'enregistrer avec une commande composite ailleurs (CloseCommand, que vous déclarez statiquement pour votre application) et toutes les vues ouvertes auront leurs méthodes CanExecute et Execute lancées pour que vous puissiez voter à la fermeture de l'application et aussi réagir à cela, devrait-il arriver de toute façon. CompositeCommands sont une caractéristique de Prism. (Voir: Commanding Quickstart)

Je pense que ce sont probablement les plus élégants. Il y a quelques options supplémentaires mais celles-ci vivent dans la meilleure harmonie avec les conventions existantes.

Espérons que cela aide.

+0

Je pense que le n ° 2 va être ma réponse ... il semble que ce soit la bonne à partir de ma tête. Pour une raison quelconque, j'ai regardé @ il y a un moment, mais il n'a pas cliqué que c'était la solution. –

Questions connexes