2011-01-17 18 views
6

Digamos que tengo un programa que tiene que representar algunos datos en dos formas diferentes de . Si quiero lograr esto teniendo dos ViewModels diferentes, parece que ambos deberían compartir la misma instancia del objeto Model. Entonces ¿cómo se logra esto generalmente en MVVM con WPF?¿Cómo se suele compartir un Modelo entre los objetos de ViewModel?

Una forma que se me ocurre es que los constructores ViewModel podrían dar un instancia del modelo adecuado y todo el cableado podría hacerse en un manejador para el evento Application.Startup. No recuerdo haber visto esto en ninguno de los ejemplos que he visto hasta ahora, pero es posible que me haya perdido.

Hasta ahora parece que la mayoría de las veces, los ejemplos solo muestran las ViewModels creación de instancias de las clases del modelo en sí, lo que podría funcionar en algunos casos pero no parece ser una buena solución para mi situación, ya cada ViewModel crearía sus propias instancias de clases de modelo. También parece que así eliminaría la posibilidad de reemplazar el modelo con un diferente, que podría desearse, como en el caso de las pruebas unitarias. Estoy supongo que un marco de inyección de dependencia o un contenedor IoC eliminaría ese problema? Solo he usado inyección de dependencia manual hasta ahora.

En otro ejemplo, parecía que la vista creada objetos del modelo en sí y les pasó a los ViewModels, que no parece ser una gran idea tampoco, ya que la vista no debe saber nada sobre el Modelo ?

Algunos ejemplos ni siquiera parecen tener clases de modelo, solo vistas y modelos de vista.

¿Hay formas mejores que no he mencionado?

Además, ¿debería usar un marco de inyección de dependencias o un contenedor IoC? Como mencioné, realmente no he usado uno antes y pensé que podría ser excesivo para el tamaño de los programas en los que estoy trabajando en este momento. Al no haber examinado realmente , puedo estar equivocado.

Respuesta

2

El enfoque general es pasar un modelo al constructor de un modelo de vista. Probablemente, los ejemplos que ha mirado no lo muestren por simplicidad. Entonces, si tiene dos modelos de vista que funcionan con los mismos datos (modelo), solo use la misma instancia del modelo en ambos.

En cuanto a la inyección de dependencia y los contenedores de IoC, como dijiste, es excesiva para proyectos pequeños, pero si el proyecto se torna grande, podría brindarte muchos beneficios.

+3

Bien, pero ¿cómo se hace esto generalmente? ¿Qué clase generalmente crea la instancia del objeto Model y lo pasa a los objetos apropiados de ViewModel? Eso es lo principal de lo que estoy confundido en este momento. – foven

-1

Tienes que compartir el modelo: si quieres tener tus datos en la UI actualizada a través de INotifyPropertyChanged, esta es una de las ideas principales de MVVM, debes compartir el modelo (al menos el puerto relevante para un cierto ViewModel) entre ViewModels.

+1

Gracias por la respuesta.Ya sé que necesito compartir el Modelo, lo que me confunde es cuáles son las mejores opciones para administrarlo. En otras palabras, probablemente haya diferentes formas de proporcionar la misma instancia del Modelo a diferentes objetos de ViewModel. Me gustaría saber cuáles son las formas típicas de lograr esto y cuándo cada una es apropiada, pros/contras de cada enfoque, etc. – foven

0

Puede establecer un modelo de aplicación como una clase única/estática. Luego, la misma instancia se comparte de forma predeterminada.

Cuestiones relacionadas