2009-08-25 11 views
10

Estoy trabajando en una nueva aplicación WPF y estoy tratando de mantenerme lo más cerca posible del patrón MVVM. Mis archivos XAML ahora no tienen ningún código subyacente, y toda mi interactividad se logra usando la clase RelayCommand de Josh Smith y los comandos en mis clases de ViewModel.Apertura de un cuadro de información usando el patrón MVVM

Esto funcionó muy bien hasta que comencé a trabajar en las tareas de limpieza, como un cuadro de acercamiento y una página de preferencias del sistema. Quiero tenerlos como diálogos modales, pero si creo un RelayCommand para abrir estas páginas, crearé una dependencia en la vista dentro de mi modelo de vista.

Esto me parece contra el patrón MVVM.

¿Existe un método establecido para crear ventanas nuevas (modal y/o no modal) dentro del patrón MVVM sin crear una dependencia? Parece que la única forma de que pueda mantener limpio ViewModel es crear un controlador de eventos Click en el archivo XAML codebehind y crear la nueva vista dentro de la vista anterior.

¿Alguna recomendación?

Respuesta

7

Una forma de manejar esto es implementar un servicio que proporcione vistas a ViewModels. Las vistas se registran con el servicio y ViewModels puede solicitar diálogos desde el servicio. Este es un ejemplo de The Gang of Four mediator pattern.

0

Por favor, consulte mi respuesta a this question sobre por qué la clase Window en sí misma es un ViewModel, por lo que puede usarla directamente desde su ViewModel sin preocupaciones.

0

Laurent Bugnion tiene un mediador débilmente referenciado, en el que lo usa para mostrar mensajes de diálogo. Junto con el mensaje que se transmite, se envía un delegado de devolución de llamada para que se ejecute el suscriptor. Puede usar el mismo concepto para mostrar un diálogo de acercamiento. Consulte DialogMessage.cs from the source here.

0

Usamos clases de controladores que son responsables del flujo de trabajo de la interfaz de usuario. Crean las ventanas modales y median entre varios ViewModels.

cómo puede abrir una ventana modal con el patrón ViewModel-ViewModel (MVVM) se muestra en la solicitud de modelo de vista muestra aquí:

marco de aplicaciones WPF (WAF)

http://waf.codeplex.com

Cuestiones relacionadas