notifier View (modèles) de fermer le programme
-
10-10-2019 - |
Question
Je suis mon prisme / MVVM / mef programme en cours bien le long, l'utilisateur saisit des données dans l'application, puis ferme l'application (ou se ferme l'ordinateur).
Comment puis-je obtenir ma vue (modèle) informé de la clôture du programme / l'arrêt de l'ordinateur, il pouvez enregistrer les données des utilisateurs ou peut-être demander si ceux-ci doivent être sauvés?
Perdre des données sur près de programme est certainement quelque chose à éviter, et il n'a pas de sens pour sauver des choses sur chaque seule touche de l'utilisateur.
La solution
J'expose CompositeCommands que les clients peuvent s'inscrire à des "événements" mondiaux intéressants, par exemple.
public static class HostCommands
{
private static readonly CompositeCommand Shutdown = new CompositeCommand();
public static CompositeCommand ShutdownCommand
{
get { return Shutdown; }
}
}
Je déclenche la commande d'arrêt dans ma coquille, par exemple.
public Shell()
{
InitializeComponent();
Closing += (sender, e) =>
{
if (HostCommands.ShutdownCommand.CanExecute(e))
HostCommands.ShutdownCommand.Execute(e);
};
}
et les clients peuvent s'inscrire comme suit, par exemple
public SomeViewModel(IEventAggregator eventService)
{
//blah, blah, blah...
HostCommands.ShutdownCommand.
RegisterCommand(new DelegateCommand<object>(_ => Save()));
}
Mise à jour
Je ne gère pas le scénario cancel, mais vous pouvez mettre en œuvre ce via l'objet qui est passé à la commande. Par exemple, dans le code ci-dessus je passe dans un CancelEventArgs que les clients pourraient manipuler à savoir en définissant Annuler = true. Je pourrais vérifier cette valeur dans mon gestionnaire d'événements Shell fermé après la commande a exécuter pour obtenir si je dois annuler la fermeture de la coquille. Ce modèle peut être étendu sur.