MVVM y View / ViewModel hierarchy
Estoy trabajando para 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.
Fondo
El juego que estoy haciendo es Sudoku. Sudoku tiene una tabla que contiene una cuadrícula de baldosas de 9x9. Tengo tres modelos -Game
, Board
yTile
. Cuando unGame
se crea, crea automáticamente unBoard
, y cuando elBoard
Se crea, crea 81 (9x9).Tiles
.
1. Con una jerarquía de vistas, ¿cómo se crean los modelos de vista correspondientes?
Para coincidir con la jerarquía de modelos, me gustaría tener una jerarquía de vistas (GameView
contiene unaBoardView
que contiene 81TileViews
). 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 laViewModelLocator
como una fuente) que crea una nueva instancia del modelo de vista. Esto parece funcionar bien si tiene una vista plana, pero también parece que se ensucia cuando tiene una jerarquía. Hace elGameView
crear unGameViewModel
y dejarlo a suBoardView
niño para crear unBoardViewModel
? Si es así, ¿cómo funciona elGameViewModel
comunicarse con elBoardViewModel
? Puede elBoardViewModel
comunicarse de nuevo la jerarquía a laGameViewModel
?
2. ¿Cómo un modelo de vista obtiene datos del modelo?
En iOS, comenzaría usando un servicio para buscar unGame
Modelo que fue pre-poblado con datos. Entonces crearía unGameViewController
ver controlador (que estaba a cargo de crear la vista) y pasar elGame
lo. En MVVM, veo el valor de tener una vista a cargo de crear su propio modelo de vista (idealmente usando unViewModelLocator
), 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 usa algún servicio para obtener sus propios datos. Pero no he encontrado ningún ejemplo que acepte parámetros de construcción o parámetros de nivel superior de navegación. ¿Cómo se hace esto?
No quiero usar un recurso de aplicación o algún otro tipo de método de almacenamiento de singleton para mi modelo porque, no es así, pero ¿y si quisiera mostrar varios rompecabezas en la pantalla a la vez? CadaGameView
debe contener su propiaGame
.
No solo elGameViewModel
necesita una referencia a laGame
modelo, pero elBoardViewModel
que se creó de alguna manera (ver pregunta 1) necesita una referencia a laBoard
modelo que pertenece a laGame
modelo. Lo mismo ocurre con todos losTiles
. ¿Cómo se pasa toda esta información por la cadena? ¿Puedo hacer este trabajo pesado por completo dentro de XAML, o tendré que hacer algún tipo de enlace 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 ansioso por encontrar ejemplos de proyectos MVVM que compartan desafíos similares a los míos. ¡Gracias una tonelada!