Questo dipende molto dall'architettura dell'app, ma ecco come lo faccio con Prism.
Per prima cosa voglio dire, è ok avere la tua VM riferimento alla vista purché non sia un'implementazione concreta della vista, cioè dei riferimenti per interfaccia.
Ho sposato View e ViewModel utilizzando l'iniezione delle dipendenze, molto simile a come è fatto in StockTraderRI. Quindi ho un IView e un IViewModel. IViewModel ha un nome chiamato "View" di tipo IView.
Dal livello di codice (per me, di solito il controller ... vedi StockTraderRI) che funziona con le regioni, aggiungere il meccanismo per rimuovere la vista dalla regione.
Ad esempio:
myRegion.Remove(myIViewModel.View);
Se le regioni sono gestite da un controller, si consiglia di mettere un semplice evento sul VM per notificare quando una VM vuole essere "chiuso". È anche possibile sperimentare con IEventAggregator se si desidera utilizzare un modello con evento debole. Se la regione viene gestita nella VM, è sufficiente aggiungere quel codice lì.
fonte
2009-09-14 02:58:35
con preziosi commenti dei membri, i sono stati in grado di codificare questo con successo. esempio di classe di implementazione è pubblicato come risposta a questa domanda. – Raj