creo que todo el mundo que utiliza un IDialogService o en realidad crea sus propios cuadros de diálogo ha terminado el problema de ingeniería. Realmente me gusta el enfoque simplista de usar Funcs. Aquí hay un ejemplo. Primero se debe agregar esto a su modelo de vista:
public abstract class ViewModelBase : INotifyPropertyChanged
{
/** Other ViewModel Code *//
public Func<string, string, bool> OkCancelDialog { get; set; }
}
Luego, cuando se instancia la clase derivada de su modelo de vista, que acaba de adjuntar el siguiente código: (Me suelen hacer esto en el arranque como Program.cs)
var myVM = new SomeSuperViewModel();
myVM.OkCancelDialog = (msg, caption) => MessageBox.Show(msg, caption, MessageBoxButton.OkCancel) == MessageBoxResult.OK;
En su código modelo de vista real, todo lo que tiene que hacer es llamar:
if (OkCancelDialog("Some crazy message.", "Caption"))
//do something if true
else
//else do something if false
En las pruebas unitarias se puede hacer esto:
var myVMToTest = new SomeSuperViewModel();
myVMToTest.OkCancelDialog = (msg, caption) => true; //could be false too if you need to test that functionality.
Prefiero este enfoque, ya que es simple y fácil de probar. ¿Qué piensan los demás?
Algunos contextos pueden ser útiles antes de intentar una respuesta: ¿por qué usa MVVM?¿Trabajas en equipo o solo? ¿Pruebas por unidad tu capa de presentación? En caso afirmativo, ¿está familiarizado con los marcos de burla? –
¿De qué estás teniendo problemas? (¿Mostrar el diálogo? ¿Cerrar el diálogo? ¿Conectar el cuadro de diálogo a su ViewModel? ¿Otro?) Además, ¿está utilizando un marco MVVM y, de ser así, cuál? –
Lo siento. Pensé que era una pregunta muy genérica. No hay código. Estoy usando Moq como framework de Mocking. De hecho, me gustaría probarlo en una unidad. En el proyecto real en el trabajo, tengo una arquitectura desconectada usando PL-SL-BL-DAL. No quería confundir a las personas o hacer que la pregunta fuera complicada. Simplemente quería y quería ayuda para mostrar un diálogo usando un patrón MVVM. No puedo usar ninguno de los frameworks que hay allí. Nosotros usamos uno interno. Una vez que agarro el contexto y puede transferirlo a mi proyecto real. – user9969