Pregunta

En mi aplicación WPF MVVM, mi modelo es un árbol complejo de objetos Modelo que cambia constantemente en tiempo de ejecución. Las instancias de modelo van y vienen en tiempo de ejecución, cambian su posición dentro del árbol y, por supuesto, cambian sus muchas propiedades. My View es casi una representación visual individual de ese árbol. Cada instancia de Model es en el 80% de los casos también un nodo en el árbol.

Mi pregunta ahora es cómo diseñaría el ViewModel alrededor de esto. Mi problema es que hay muchos tipos diferentes de modelos con cada uno muchas propiedades. Si entendiera MVVM correctamente, la vista no debería comunicarse directamente con el Modelo, por lo que esto significaría que tendría que crear un tipo de ViewModel para cada tipo de Modelo y tener que volver a envolver cada propiedad del tipo de Modelo en el ViewModel.

También el ViewModel necesitaría '' vincularse '' a los cambios de propiedad del Modelo para pasarlo a la vista (usando wpf datatbinding). Necesitaría alguna fábrica que cree e introduzca una instancia de ViewModel para cada Modelo que aparezca de nuevo y tendría que disponer de cada instancia de ViewModel cuando desaparezca el Modelo correspondiente. Termino haciendo un seguimiento de todas las instancias que creé. Es increíble cuánto código de hinchazón se genera debido a esta doble envoltura. ¿Es realmente un buen enfoque? Cada entidad y cada propiedad más o menos existe dos veces y tengo una gran cantidad de código adicional que mantiene el Modelo y la Vista sincronizados. Como manejas esto? ¿Hay alguna forma más inteligente de resolver esto?

¿Alguien tiene una implementación de referencia / muestra para esto que lo haga mejor que yo?

¿Fue útil?

Solución

Creo que puede caer en la trampa del paradigma si sigue este camino. MVVM no es más que un patrón, que simplifica el desarrollo en el mundo WPF. Si no es así, no lo use ni revise su enfoque. No pasaría el 80% de mi tiempo solo para verificar el " Uso de MVVM " campo.

Ahora volvamos a su pregunta. Corrígeme si me equivoco, pero parece que estás mirando MVVM desde la dirección opuesta: no necesitas Modelo para ViewModel correspondencia uno a uno. Por lo general, primero crea ViewModels en función de su Vista, y solo luego en un Modelo.

Generalmente, usted mira en una maqueta de pantalla de diseñadores gráficos, y crea el ViewModel correspondiente, que toma todos los campos necesarios del Modelo, los envuelve / modifica / formatea / combina para hacer que el desarrollo de Vistas sea lo más fácil posible.

Dijiste que tu Vista es una representación visual casi individual del Modelo. En este caso, puede tener sentido crear un ViewModel muy simple que exponga el objeto raíz de su árbol modelo y permita que View consuma el modelo directamente a través de esa propiedad. Luego, si necesita algunas personalizaciones de View o procesamiento de comandos, puede delegarlo a ViewModel.

Perdón por una respuesta muy vaga. Tal vez si hace una pregunta más específica podríamos disipar la confusión:) ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top