私はWindows8用のC#とXAMLを使用して最初のゲームの作成に取り組んでいます。コアの概念とベストプラクティスをまだ学んでおり、MVVMはハードルでした。私は2つの部分で質問をしようとします。
バックグラウンド
私が作っているゲームは数独です。数独には、9x9グリッドのタイルを含むボードがあります。、、、の3つのモデルがGame
ありBoard
ますTile
。aGame
が作成されると、自動的にが作成され、が作成さBoard
れると、Board
81(9x9)が作成されますTiles
。
1.ビューの階層を使用して、対応するビューモデルはどのように作成されますか?
モデルの階層を一致させるために、ビューの階層(81を含むを含むGameView
)が必要です。XAMLでは、ユーザーコントロールを使用してこのビューの階層を作成するのは非常に簡単ですが、ビューモデルがどのように作成されるのかわかりません。BoardView
TileViews
私が見た例では、ユーザーコントロールのデータコンテキストは、ビューモデルViewModelLocator
の新しいインスタンスを作成するビューモデル(ソースとして使用)に設定されることがよくあります。これは、フラットビューの場合はうまく機能するようですが、階層がある場合は厄介になるようにも見えます。を作成し、それを子に任せてGameView
作成しますか?もしそうなら、どのように通信しますか?通信は階層をバックアップすることができますか?GameViewModel
BoardView
BoardViewModel
GameViewModel
BoardViewModel
BoardViewModel
GameViewModel
2.ビューモデルはどのようにモデルデータを取得しますか?
Game
iOSでは、サービスを使用して、データが事前に入力されたモデルをフェッチすることから始めます。次に、GameViewController
ビューコントローラ(ビューの作成を担当)を作成し、Game
それに渡します。MVVMでは、ビューが独自のビューモデルの作成を担当することの価値はわかりますが(理想的にはを使用してViewModelLocator
)、そのビューモデルがモデルを取得する方法がわかりません。
私がオンラインで見つけたすべての例で、ビューモデルは独自のデータをフェッチするために何らかのサービスを使用しています。しかし、コンストラクターパラメーターまたはより高いレベルのナビゲーションから渡されたパラメーターを受け入れる例はありません。これはどのように行われますか?
モデルにアプリケーションリソースやその他の種類のシングルトンストレージメソッドを使用したくないのは、使用しないためですが、画面に複数のパズルを一度に表示したい場合はどうすればよいですか?それぞれGameView
に独自のが含まれている必要がありますGame
。
モデルGameViewModel
への参照が必要なだけでなく、何らかの方法で作成されたモデル(質問1を参照)には、モデルに属するモデルへの参照が必要です。同じことがすべてに当てはまります。このすべての情報はどのようにチェーンに渡されますか?完全にXAML内でこれほど手間のかかる作業を行うことはできますか、それともコードで何らかのバインディングやその他の初期化を行う必要がありますか?Game
BoardViewModel
Board
Game
Tiles
ふぅ!
完全な答えではない場合でも、アドバイスをいただければ幸いです。また、自分と同じような課題を共有するMVVMプロジェクトの例を見つけたいと思っています。トンありがとう!