Su problema conceptual está aquí:
de control Cada usuario tiene una máquina virtual correspondiente.
Tener un ViewModel separado para cada vista prácticamente anula el concepto de un ViewModel. ViewModels no debe ser uno a uno con las vistas, de lo contrario no son más que código glorificado detrás.
Un modelo de vista capta el concepto de "estado de la interfaz de usuario actual" - como lo que la página que se encuentra y si está o no se está editando -. En contraposición a los "valores de datos actuales
Realmente para cosechar los beneficios de MV-VM determinan la cantidad de clases de ViewModel utilizadas en función de los distintos elementos que necesitan estado. Por ejemplo, si tiene una lista de elementos, cada uno de los cuales puede mostrarse en 3 estados, necesita una VM por artículo. , si tiene tres vistas, todas las cuales muestran datos de 3 maneras diferentes, dependiendo de una configuración común, la configuración común debe capturarse en una sola VM.
Una vez que haya estructurado sus ViewModels para reflejar el requisitos de la tarea en cuestión generalmente se encuentra que no hay necesidad ni deseo de comunicar el estado entre vistas. Si existe tal necesidad, lo mejor que puede hacer es volver a evaluar su diseño de ViewModel para ver si un ViewModel compartido podría beneficiarse de una pequeña cantidad de información de estado adicional.
Habrá momentos en que la complejidad de la aplicación dicte el uso de varios ViewModels para el mismo objeto de modelo. En este caso, los ViewModels pueden mantener referencias a un objeto de estado común.
¿Puede explicar esto en detalle? ¿Quiere decir usar delegado y eventos de CLR? – Sandbox
Acabo de editar mi respuesta agregando el enlace a la presentación con un código de ejemplo del blog de Marlon Grech. Los modelos de vista se comunican en el patrón del editor/suscriptor (no se necesita código). El servicio de mediación utiliza delegados CLR para registrar manejadores de eventos. – PanJanek