Sto cercando di imparare WPF e il problema MVVM, ma ho colto di sorpresa. Questa domanda è simile ma non è la stessa di questa (gestione-dialoghi-in-wpf-con-mvvm) ...
Ho un modulo "Login" scritto usando il modello MVVM.
Questo modulo ha un ViewModel che contiene il nome utente e la password, che sono associati alla vista in XAML utilizzando normali associazioni di dati. Ha anche un comando "Login" associato al pulsante "Login" sul modulo, che può essere utilizzato come normale database.
Quando viene attivato il comando "Login", viene richiamata una funzione in ViewModel che si spegne e invia i dati sulla rete per accedere. Al termine di questa funzione, sono disponibili 2 azioni:
L'accesso non è valido - mostriamo solo un MessageBox e tutto va bene
L'accesso era valido, dobbiamo chiudere il modulo di accesso e farlo restituire vero come
DialogResult
...
Il problema è che ViewModel non sa nulla della vista effettiva, quindi come può chiudere la vista e dirgli di restituire un particolare DialogResult ?? Potrei attaccare un po 'di codice in CodeBehind e / o passare la vista attraverso ViewModel, ma sembra che questo avrebbe sconfitto del tutto il punto di MVVM ...
Aggiornare
Alla fine ho appena violato la "purezza" del modello MVVM e ho fatto pubblicare a View un Closed
evento ed esponendo un Close
metodo. Il ViewModel avrebbe quindi solo chiamato view.Close
. La vista è nota solo tramite un'interfaccia e cablata tramite un contenitore IOC, quindi non si perde alcuna testabilità o manutenibilità.
Sembra piuttosto sciocco che la risposta accettata sia di -5 voti! Mentre sono ben consapevole dei buoni sentimenti che si provano risolvendo un problema pur essendo "puri", sicuramente non sono l'unico che pensa che 200 linee di eventi, comandi e comportamenti solo per evitare un metodo a una linea in il nome di "modelli" e "purezza" è un po 'ridicolo ....
Close
metodo semplice sia ancora la soluzione migliore. Tutto il resto nelle altre finestre di dialogo più complesse è MVVM e databound, ma sembrava sciocco implementare qui le enormi "soluzioni" invece di un semplice metodo ...