Domanda

MVVM Fondazione ma penso che sia abbastanza straight-forward e non veramente specifico quadro. La mia configurazione è la seguente:

  • StartViewModel - ha un comando exit che restituisce un RelayCommand / ICommand

    public ICommand ExitCommand {
        get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
    }
    public RelayCommand _exitCommand;
    
  • vista all'avvio (controllo utente) ha un pulsante rilegata al comando exit

    <Button Content="Exit" Command="{Binding ExitCommand}" />  
    
È stato utile?

Soluzione

Per prima cosa, leggere quanto più potete stomaco su MVVM, per esempio WPF Apps Con Il Model-View-ViewModel Design Pattern su MSDN. Una volta compresi i principi di base di guida è la risposta sembrerà più ragionevole.

In sostanza si desidera mantenere la vista (UI) e ViewModel (essenzialmente astratto UI, ma anche astratto Model) strati separato e disaccoppiato. Mostrando una finestra di messaggio o la chiusura di una finestra dovrebbe essere considerato un utente specifico dettaglio e quindi implementato nel View, o nel caso di una finestra di messaggio, più in generale, disponibile tramite un 'servizio'.

Per quanto riguarda il ViewModel, questo si ottiene utilizzando Inversion of Control (IOC). Prendiamo l'esempio di dialogo messaggio di cui sopra. Piuttosto che mostra la finestra di messaggio in sé, ci vuole una dipendenza da un IMessageBoxService che ha un metodo Show e il ViewModel chiamate che invece - delegando la responsabilità. Questo potrebbe essere preso ulteriormente contenitori leva Dependency Injection (DI).

Un altro approccio utilizzato per la chiusura di una finestra Vista potrebbe essere per il ViewModel per esporre un evento, chiamato ad esempio RequestClose (come nell'articolo MSDN), che la vista sottoscrive. Poi il ViewModel dovrebbe generare l'evento quando vuole il corrispondente Vista / finestra per chiudere; assume qualcosa d'altro è in ascolto e si assumerà la responsabilità ed effettivamente farlo.

Altri suggerimenti

è possibile implementare un CloseEvent nel vostro StartViewModel. in vista all'avvio è necessario registrarsi questo CloseEvent. quando si alza la CloseEvent dal VM allora, la vista riconoscere che deve chiudere la vostra applicazione / finestra.

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