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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top