2010-05-21 9 views
7

Parece que el patrón XAML en MVVM tiene dificultad para abrir un Messageboxes. Mi cliente insiste en que las etiquetas de validación y los colores no son buenos para ellos. Todavía quieren un cuadro de mensaje. ¿Cómo puede hacerlo?¿Cómo usar los buzones de mensajes en MVVM?

Sé que puedo abrir cuadros de mensajes en el modelo de vista, pero viola todo el propósito del modelo de vista. También puedo generar un error y mostrar un cuadro de mensaje en algunos manejadores de excepciones, pero el cuadro de mensaje no es una excepción. Es parte del flujo normal del programa.

¿Hay una buena manera de hacerlo en XAML? A mi cliente le gustan los messageboxes. A ella no le importa el patrón MVVM, nunca tuvo ningún problema de calidad antes de usar MVVM y prueba unitaria. Pero ahora, ella ni siquiera puede obtener sus buzones de mensajes, por lo que no está muy feliz.

Respuesta

1

Puede tener un evento PopUpNotificationRequested en su ViewModel que será manejado por la Vista para mostrar cuadros de mensaje. De esta manera, la lógica para mostrar el mensaje permanece en el modelo de vista, pero aún está desacoplado de la vista.

+0

Muchas gracias. Pero hice una búsqueda en Google de "PopUpNotificationRequested" y no pude obtener nada. Otra cosa: si utilizo "PopUpNotificationRequested", todavía estoy tocando la IU directamente, ¿esto viola el patrón de MVVM? – BigTiger

2

Una posibilidad es utilizar una interfaz para el cuadro de mensaje como

public interface IMessageBoxProvider 
{ 
    MessageBoxResult Show(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult); 

} 

y una clase de contenedor que implementa esta interfaz y utiliza un cuadro de mensaje normal o personalizado. En el modelo de vista A continuación, puede utilizar como esto

private IMessageBoxProvider MessageBox { get; set; } 

donde de mensaje es la clase contenedora. Entonces ahora ha desacoplado el cuadro de mensaje actual y puede realizar pruebas unitarias y otras cosas.

2

Josh Smith también tiene un artículo en CodeProject que puede interesarle here.

Cuestiones relacionadas