penso tutti gli altri che utilizza un IDialogService o crea effettivamente le proprie finestre di dialogo è finita ingegnerizzazione del problema. Mi piace molto l'approccio semplicistico dell'uso di Func. Ecco un esempio. In primo luogo aggiungere questo al vostro ViewModel:
public abstract class ViewModelBase : INotifyPropertyChanged
{
/** Other ViewModel Code *//
public Func<string, string, bool> OkCancelDialog { get; set; }
}
Poi, quando si istanzia la classe derivata del vostro ViewModel, basta collegare il seguente codice: (Io di solito faccio in startup come Program.cs)
var myVM = new SomeSuperViewModel();
myVM.OkCancelDialog = (msg, caption) => MessageBox.Show(msg, caption, MessageBoxButton.OkCancel) == MessageBoxResult.OK;
Nel codice ViewModel reale, tutto quello che dovete fare è chiamare:
if (OkCancelDialog("Some crazy message.", "Caption"))
//do something if true
else
//else do something if false
Nei vostri test di unità si può fare questo:
var myVMToTest = new SomeSuperViewModel();
myVMToTest.OkCancelDialog = (msg, caption) => true; //could be false too if you need to test that functionality.
Preferisco questo approccio, in quanto è semplice e facile da testare. Cosa pensano gli altri?
fonte
2010-11-17 17:35:01
Alcuni contesto potrebbe essere utile prima di fare un tentativo di una risposta: perché stai usando MVVM?Lavori in team o da solo? Metti alla prova il tuo livello di presentazione? Se sì, conosci i quadri di derisione? –
Con cosa stai avendo problemi? (Visualizzazione della finestra di dialogo? Chiusura della finestra di dialogo? Cablaggio della finestra di dialogo sul ViewModel? Altro?) Inoltre, si sta utilizzando un framework MVVM e, in caso affermativo, quale? –
Mi dispiace. Ho pensato che fosse una domanda molto generica. Quindi nessun codice. Sto usando Moq come framework Mocking. Preferibilmente vorrei testarlo unitamente. Nel vero progetto al lavoro ho un'architettura disconnessa usando PL-SL-BL-DAL. Non volevo confondere le persone o rendere la domanda implicata. Volevo semplicemente chiedere aiuto su come mostrare una finestra di dialogo usando un pattern MVVM. Non posso usare nessuno dei framework disponibili. Usiamo uno in house one.Once I grab il contesto e può trasferirlo al mio vero progetto. – user9969