アップデート::私はそれについて考えると、より良いデータバインディングサポート(MVVMにとって重要)を備えたカスタムコントロールに傾いています。これをカバーするネット上には多くの情報源があります。
質問に対する半回答には2つの問題があります。 1つは複雑なデータの表示とバインディングサポートの公開です.2つ目はMVVMのバインドに関するプラクティスです(ただし、問題の大部分が図面に記載されているように簡単になります)。 MVVMはベクターグラフィックをどのようにしますか?そうではありません、コントロールがします。コントロールは、拡張可能/汎用の方法で必要なものをどのように公開しますか?わかりませんが、CodePlexのWPF Control Toolkitライブラリにはもっと複雑な例があります。
これは実際に「ここに行く」答えではありませんが、考え方の観点から見ると、ViewModelはどのように「表示」されているか気にする必要はないと考えています(ViewModelでは知っているビュー)。
しかし、はではありません。つまり、ViewModelはどのモデルが提示されているか気にする必要はありません。
オフィスプランを表すためのモデル構造(高さ、x/y座標などのプロパティを持つ)は重要な部分です。 ViewModelはモデルを検証し、ビューはそのような検証結果に単純に応答します。これは明らかにViewModelとモデルの間のカップリングを作成します - 私は "ルール"がそこにあるか分かりません。
これは視覚的に表現されたモデルであり、「ドアを挿入する」などのコマンドは標準のMVVMルーティングコマンドスタイルコーディングで解決できます。あなたのケースでは、ViewModelの応答は、関連するCurrentSelectedWallでOffice Planモデルに新しいDoorを挿入することです。
など。
私が答えることのできない質問は、ビューとモデルとの間の密接な結合が許容されているかどうかです。私のサンプルでは、モデルはビューが高さ、x/yなどを描くためのすべての重要な情報を保持します。おそらくこれは抽象化することができます。
残念ながら、そうなビューを作成することは、単純なデータはXAMLでバインディングを行うことはできません - 私はこれを行うには、ビューのコード-重い道を見ることができます... :-(
選択肢があります
「どこから始めますか」の質問は非常に答えにくいです。それを試して、あなたが持っている特定の質問を自由にお聞きください。 –
@ケンドール、合意されているが、ブログやその他の現実を経験したことを指摘する回答もまた大きな価値がある。 –
も参照してくださいhttp://stackoverflow.com/questions/889825/is-it-possible-to-bind-a-canvass-children-property-in-xaml –