2012-05-01 9 views
1

私はいくつかのベクターグラフィックを表示し、ユーザーにアイテムを選択させたいと思っています。オーグメントの便宜上ベクトルグラフィックスのMVVMとの関係は?

は私が

  • 壁、
  • コーナー、
  • ドア、
  • のWindows、
  • デスク

が含まれているオフィスプランを表示していますと仮定しますビューモデルに対してテストを書いて両方の論理的および物理的レイアウト。例えば。私は、壁がコーナーを満たしていることを確認するテストと、それらがどのように表示されるかを確認するテストを書くことができるようにしたいと考えています。

私も

誰がこれをやってみました「選ば壁に挿入ドア」のようなコマンドをテストする必要があり

グラフィックアイテムへのデータバインディングの問題は何ですか?

+1

「どこから始めますか」の質問は非常に答えにくいです。それを試して、あなたが持っている特定の質問を自由にお聞きください。 –

+0

@ケンドール、合意されているが、ブログやその他の現実を経験したことを指摘する回答もまた大きな価値がある。 –

+0

も参照してくださいhttp://stackoverflow.com/questions/889825/is-it-possible-to-bind-a-canvass-children-property-in-xaml –

答えて

1

アップデート::私はそれについて考えると、より良いデータバインディングサポート(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でバインディングを行うことはできません - 私はこれを行うには、ビューのコード-重い道を見ることができます... :-(

選択肢があります

1

私は多かれ少なかれ同じことをやろうとしていますが、私はまだ実現していませんが、私の考えはViewModelCanvasを持つことでした。ここで私はロジックを入れ、そこに含まれるオブジェクトはWallViewModel、DoorViewModelなどです。これらのオブジェクトのそれぞれには、コーディエンティティ、向きなどのプロパティが含まれています。 次にビューレイヤーI DatacontextとしてViewModelCanvasを持つWPFCanvasと、その表示方法を定義する各viewmodelクラスのテンプレートがあります。

これは静的な視覚化に有効です。しかし、インタラクティブなビューを得るのに十分な柔軟性があるかどうかは確かではありますが、良い確率があります;

関連する問題