2009-09-24 6 views
10

Estamos construyendo una aplicación utilizando el patrón MVVM, que tienen controladores de cable hasta que todos los puntos de vista y utilizando ViewModels DI. Todos los ejemplos de MVVM que he visto son realmente simplistas y tienen 1 vista. ¿Cómo deben/deberían los modelos de vista comunicarse con el controlador? El controlador sabe acerca de los modelos y las vistas, ¿debería el modelo de vista enviar eventos al controlador? ¿Dónde debería pasar un salvamento? ¿Modelo? ¿Controlador?Controladores en MVVM, ¿Cómo obtener información del modelo de vista para su controlador?

Respuesta

3

Utilizamos controladores también, pero en nuestro caso, que son responsables de la aplicación de flujo de trabajo. El controlador conoce el modelo de vista y el modelo, pero no la vista concreta porque esto será inyectado por el contenedor IoC.

Si usted está interesado en un ejemplo que muestra más de una interfaz de usuario (diálogo modal, asistente de flujo de trabajo condicional) entonces es posible echar un vistazo a:

marco de aplicaciones WPF (WAF) - http://waf.codeplex.com

+1

Ya estamos haciendo las cosas al revés. Nuestro controlador conoce una interfaz de visualización e inyecta el modelo de vista y el modelo. – nportelli

5

Podría su modelo de vista no tener una dependencia de una IController o alguna otra interfaz, por lo que se puede hablar de nuevo a él? Intento mantener la mayor cantidad posible de lógica de aplicación fuera del ViewModel, ya que estas clases pueden hincharse fácilmente.

MyViewModel(IController controller) 
{ 
    this.controller = controller; 
} 

void Save() 
{ 
    this.controller.Save(); 
} 

Estoy de acuerdo en que los marcos MVVM tienden a ser demasiado simplista con sus muestras. En particular, me gustaría ver más ejemplos de cómo moverme entre vistas/pantallas en su aplicación. Creé una interfaz IViewManager, para permitir que ViewModels solicite que nos cambiemos a otra vista.

+1

bien el controlador que recibe información del modelo de vista, no queremos una dependencia de 2 vías pasando o la posibilidad de que un modelo de vista Mis ser reutilizado por otro controlador. – nportelli

+1

Hmmmm, no estoy del todo seguro de entender qué patrón está usando. ¿Estás diciendo que tienes un controlador por vista? ¿No es eso más MVC que MVVM? Tal vez podrías agregar un poco de código de ejemplo a tu pregunta para mostrar cómo creas una vista y un modelo de vista. –

+0

Un controlador por vista no, un controlador por caso de uso. Lo siento si no lo dejé claro. – nportelli

1

Puedo utilizar una configuración similar a la suya. En mi controlador, donde mi DI y la inyección de la vista disminuyen, a veces sigo haciendo referencia al ViewModel (que contiene la Vista). En algunos casos, puedo tener un evento en la máquina virtual que maneja el controlador. En otros casos extremos (como si la VM/V se creó fuera del controlador, digamos en otra máquina virtual), incluso puedo usar el EventAggregator (con una referencia fuerte) para escuchar los eventos que pueden dispararse en la máquina virtual. En ese caso, una referencia almacenada a la VM no es necesaria.

+0

Nuestro controlador no sabe acerca de la VM. Solo e interfaz a la vista. La VM se inyecta desde allí. La idea es que el controlador no sabe sobre el patrón que está implementando la interfaz de usuario, por lo que podemos cambiar la interfaz de usuario fácilmente. Lo que está dando lugar a nuestros problemas, creo. – nportelli

0

¿Qué le parece usar eventos en los que el controlador se suscribe a eventos de VM o utiliza un patrón de mediador donde se inyecta en un mediador en una VM?

Cuestiones relacionadas