que - wpf como implementar mvvm
Abriendo un cuadro de acercamiento usando el patrón MVVM (5)
Laurent Bugnion tiene un mediador de referencia débil, 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 desde la fuente aquí .
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.
Esto funcionó de maravilla 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 choca 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 en que puedo mantener limpio el 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?
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 del patrón de mediador de la Banda de los Cuatro.
Usamos clases de controlador que son responsables del flujo de trabajo de la interfaz de usuario. Crean las ventanas modales y median entre varios ViewModels.
La forma en que puede abrir una ventana modal con el patrón View-Model-ViewModel (MVVM) se muestra en la aplicación de ejemplo ViewModel aquí:
Marco de aplicación de WPF (WAF)
Eche un vistazo a mi solución Modal Dialogs para Silverlight 4:
Consulte mi respuesta a esta pregunta sobre por qué la clase Window en sí misma es un ViewModel, por lo que puede usarla directamente desde su ViewModel sin preocupaciones.