Pregunta

Tengo una aplicación de WPF que he estado tratando de escribir en el estilo MVVM. Si se produce una excepción (como cuando se abre un documento), me gustaría mostrar un cuadro de mensaje. Fácil de hacer, pero mi código no se siente del todo bien porque la llamada es MessageBox.Show en el modelview. Pensé que ese tipo de cosas se supone que vive en la vista, pero yo no tengo que poner el código en la vista.

Así que la pregunta realmente puede ser destilada hasta ¿cuál es la forma sugerida para mostrar un cuadro de mensaje en MVVM?

¿Fue útil?

Solución

Utilice un servicio:

public void SomeMethodInYourViewModel()
{
    try
    {
        DoSomethingDangerous();
    }
    catch (Exception ex)
    {
        ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
    }
}

Ahora ha desacoplado sus máquinas virtuales desde la presentación de los mensajes. Usted puede incluso decidir no utilizar los estándares cajas (feo) de mensajes en absoluto y que no afectará a sus máquinas virtuales.

Otros consejos

Tenga una mirada en excelente MVVM Fundación de Josh Smith en CodePlex . En concreto, echar un vistazo a la clase Messenger, una forma ligera de transmitir mensajes entre varios objetos ViewModel que no necesitan estar al tanto de unos a otros.

Además, no creo que hay una regla dura y rápida en "Sin código en la vista", aunque es mejor evitar si es posible ... recuerde que su XAML es un código escrito en .NET simplemente una sintaxis declarativa; el código subyacente es sólo C # o VB.net para complementar la que (si es absolutamente necesario!)

También te a sólo hay que poner una propiedad de cadena ErrorMessage en su clase ViewModel que su vista se puede unir a.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top