Estoy trabajando en hacer mi primer juego usando C# y XAML para Windows 8. Todavía estoy aprendiendo los conceptos básicos y las mejores prácticas, y MVVM ha sido un obstáculo. Intentaré hacer la pregunta en dos partes.Jerarquía MVVM y View/ViewModel
Antecedentes
El juego que estoy haciendo es Sudoku. Sudoku tiene una tabla que contiene una cuadrícula de mosaicos de 9x9. Tengo tres modelos: Game
, Board
y Tile
. Cuando se crea un Game
, crea automáticamente un Board
, y cuando se crea el Board
, crea 81 (9x9) .
1. ¿Con una jerarquía de vistas, cómo se crean los modelos de vista correspondientes?
para que coincida con la jerarquía de los modelos, me gustaría tener una jerarquía de puntos de vista (GameView
contiene una BoardView
que contiene 81 TileViews
). En XAML, es bastante fácil crear esta jerarquía de vistas con controles de usuario, pero no entiendo cómo se crean los modelos de vista.
En los ejemplos que he visto, el contexto de datos de un control de usuario a menudo se establece en el modelo de vista (usando el ViewModelLocator
como fuente) que crea una nueva instancia del modelo de vista. Esto parece funcionar bien si tienes una vista plana, pero también parece que se complica cuando tienes una jerarquía. ¿El GameView
crea un y lo deja en manos de su hijo BoardView
para crear un BoardViewModel
? Si es así, ¿cómo se comunica el con el BoardViewModel
? ¿Puede el BoardViewModel
comunicarse una copia de seguridad de la jerarquía al ?
2. ¿Cómo obtiene un modelo de vista los datos del modelo?
En iOS, comenzaría utilizando un servicio para buscar un modelo Game
que se rellenó previamente con datos. Luego crearía un controlador de vista GameViewController
(que estaba a cargo de crear la vista) y le pasaría el Game
. En MVVM, veo el valor de tener una vista a cargo de crear su propio modelo de vista (idealmente usando un ViewModelLocator
), pero no entiendo cómo ese modelo de vista obtiene el modelo.
En todos los ejemplos que he encontrado en línea, el modelo de vista utiliza algún servicio para recuperar sus propios datos. Pero no he encontrado ningún ejemplo que acepte parametros de constructor o params pasados desde un nivel superior de navegación. ¿Cómo se hace esto?
No quiero usar un recurso de aplicación u otro tipo de método de almacenamiento singleton para mi modelo porque, no es lo que hago, pero ¿qué ocurre si quiero mostrar varios acertijos en la pantalla a la vez? Cada GameView
debe contener su propio Game
.
No sólo el necesitan una referencia al modelo de Game
, pero el BoardViewModel
que se creó alguna manera (ver pregunta 1) necesita una referencia al modelo Board
que pertenece al modelo Game
. Lo mismo ocurre con todos los . ¿Cómo se transmite toda esta información en la cadena? ¿Puedo hacer este trabajo mucho más pesado completamente dentro de XAML, o voy a tener que hacer algún tipo de encuadernación u otra inicialización en el código?
¡Uf!
Agradezco cualquier consejo que pueda dar, incluso si no es una respuesta completa. También estoy interesado en encontrar ejemplos de proyectos de MVVM que compartan desafíos similares a los míos. ¡Gracias una tonelada!
Creo que está hablando del problema de controles de usuario anidados (vea http://catel.catenalogic.com/index.htm?gs_viewscontrols_nested_user_controls_problem.htm). Catel en sí no está disponible para WinRT todavía (una versión beta es sin embargo), pero al menos puede entender cómo creo que debería hacerse. –