MVVM и иерархия View / ViewModel
я работаю над созданием моей первой игры с использованием C # и XAML для Windows 8. ЯЯ все еще изучаю основные концепции и лучшие практики, и MVVM стал препятствием. Я'Я попытаюсь задать вопрос в двух частях.
Фон
Игра яЯ делаю это судоку. У Судоку есть доска с 9x9 сеткой плиток. У меня есть три модели -,Game
Board
, а такжеTile
, КогдаGame
создается, он автоматически создаетBoard
и когдаBoard
создан, он создает 81 (9x9).Tiles
1. Как создаются соответствующие модели представлений с иерархией представлений?
Чтобы соответствовать иерархии моделей, я хотел бы иметь иерархию представлений (GameView
содержитBoardView
который содержит 81TileViews
). В XAML этоДовольно легко создать эту иерархию представлений с помощью пользовательских элементов управления, но я неНе понимаю, как создаются модели представлений.
В примерах яВидно, что контекст данных пользовательского элемента управления часто устанавливается на модель представления (используяViewModelLocator
в качестве источника), который создает свежий экземпляр модели представления. Кажется, это хорошо работает, если у вас плоский вид, но также кажется, что это становится грязным, когда у вас есть иерархия. ЛиGameView
создатьGameViewModel
и оставь это на усмотрениеBoardView
ребенок, чтобы создатьBoardViewModel
? Если да, то какGameViewModel
общаться сBoardViewModel
? Может лиBoardViewModel
связаться обратно по иерархии к?GameViewModel
2. Как модель представления получает данные модели?
В iOS я бы начал с использования службы для полученияGame
модель, которая была предварительно заполнена данными. Я бы тогда создалGameViewController
контроллер представления (который отвечал за создание представления) и передатьGame
к этому. В MVVM я вижу ценность того, чтобы представление отвечало за создание своей собственной модели представления (в идеале с использованиемViewModelLocator
), но я неЯ не понимаю, как эта модель представления получает модель.
Во всех примерах янайденная в сети, модель представления использует некоторый сервис для извлечения собственных данных. Но у меня нетНе встречайте ни одного примера, который принимает параметры конструктора или параметры, переданные с более высокого уровня навигации. Как это сделать?
Я неЯ не хочу использовать ресурс приложения или какой-либо другой метод хранения синглтонов для моей модели, потому что не это я делаю, а что, если я хочу отображать на экране несколько головоломок одновременно? каждыйGameView
должен содержать свой собственный.Game
Мало того, чтоGameViewModel
нужна ссылка наGame
модель, ноBoardViewModel
который был каким-то образом создан (см. вопрос 1), нуждается в ссылке наBoard
модель, которая принадлежитGame
модель. То же самое касается всехTiles
, Как вся эта информация передается по цепочке? Могу ли я сделать эту тяжелую работу полностью внутри XAML, или мне придется выполнить какое-то связывание или другую инициализацию в коде?
Уф!
Я ценю любой совет, который вы можете дать, даже если онне полный ответ. Я'Я также хотел бы найти какие-либо примеры проектов MVVM, которые разделяют мои проблемы. Благодаря тонну!