Domanda

Così ho ottenuto il mio prisma / MVVM / MEF programma in esecuzione bene insieme, l'utente sta entrando dati nell'applicazione, quindi chiude l'applicazione (o spegne il computer).

Come posso ottenere mio punto di vista (Model) notificata la chiusura del programma / l'arresto del computer, quindi è possibile salvare i dati degli utenti o forse chiedere se questi devono essere salvati?

La perdita di dati sul programma vicino è sicuramente qualcosa da evitare, e non ha senso per risparmiare roba su ogni singolo tasto dell'utente.

È stato utile?

Soluzione

I esporre CompositeCommands che i clienti possono registrarsi per per interessanti "eventi" a livello mondiale, per es.

public static class HostCommands
{
    private static readonly CompositeCommand Shutdown = new CompositeCommand();

    public static CompositeCommand ShutdownCommand
    {
        get { return Shutdown; }
    }
}

I innescare il comando shutdown nel mio guscio, per es.

public Shell()
{
    InitializeComponent();

    Closing += (sender, e) =>
    {
        if (HostCommands.ShutdownCommand.CanExecute(e))
            HostCommands.ShutdownCommand.Execute(e);
    };
}

E i clienti possono registrarsi come segue, per esempio

public SomeViewModel(IEventAggregator eventService)
{
    //blah, blah, blah...

    HostCommands.ShutdownCommand.
        RegisterCommand(new DelegateCommand<object>(_ => Save()));
}

Aggiorna

Non mi occupo lo scenario annullare, ma si potrebbe implementare questa tramite l'oggetto che viene passato al comando. Ad esempio nel codice precedente passo in CancelEventArgs cui i client possono manipolare cioè modificando Annulla = true. Ho potuto ispezionare questo valore nel mio gestore di eventi chiuso Shell dopo che il comando è eseguito per derivare se devo annullare la chiusura del guscio. Questo modello può essere ampliato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top