También estoy trabajando en un proyecto MVVM donde necesito cuadros de diálogo modales o buzones de mensajes. He encontrado la siguiente manera de resolverlo:
El software utiliza una sola ventana. El elemento raíz de diseño es una cuadrícula sin definiciones de filas o columnas. La grilla tiene tres hijos:
- Un dockpanel que contiene todos los elementos habituales, como menús, vistas con pestañas, barra de estado, etc.
- Una cuadrícula que tiene un fondo gris y una opacidad del 50%. Esto se usa como un velo para cubrir el panel del muelle cuando un cuadro modal está en efecto. La rejilla del velo generalmente se colapsa.
- Una cuadrícula que contiene vistas modales, por lo general se contrae.
El viewmodel para la ventana principal tiene un miembro llamado Modal. Si esto es nulo, las dos cuadrículas para el uso modal se colapsan a través de enlace de datos y un convertidor para Visibility.Collapsed.
Cuando el programa quiere mostrar, por ejemplo, un cuadro de mensaje modal, se crea una instancia de un MessageBoxViewModel y se asigna a MainViewModel.Modal. El MessageBoxViewModel tiene un Comando para un botón Aceptar. Este comando plantea un evento que establece MainViewModel.Modal para anular nuevamente.
La rejilla del velo ocluye el DockPanel principal, por lo que no hay controles fuera del control modal que acepten la entrada.
Su programa puede ejecutar una bomba de mensajes hasta que se presione OK, o el comando OK puede disparar el siguiente. Hay muchas maneras de resolver las diferentes necesidades, pero la solución ModelView Model debería ser compatible.
Creo que este es un buen modelo de vista en el modo modal como uno puede esperar.
Tal vez a especificar algunas manejador OnvisibilityChanged en el código subyacente de la ventana de error? – bluebit