2011-01-22 11 views
0

こんにちは、私はViewModelを介して設定されているxmalでグリッドを作成しようとしています。 グリッドは5x5グリッドで、ViewModelには「MyObject」のリストが含まれています。このオブジェクトには2つのint変数が含まれています。行と列のマッチはグリッド内のどこにオブジェクトがあるべきかを示します。 MyObjectもビューモデルです。グリッドスペースには、データテンプレートとしてMyTemplateをDataContextとしてMyObjectで埋めなければなりません。 今、私はxamlとビューモデルにはかなり新しいですが、これを実行する最良の方法は?Xaml Dynamic Grid with Viewmodels

+0

あなたはおそらくxmalとxmalを意味しますか? – Rumplin

答えて

1

見てみましょう...
VM、そして...

オプション1へのObservableCollectionを入れて:V.へ
...シンプルなグリッドはそれがXAMLからイベントをて、CollectionChangedだを購読します。各追加されたオブジェクトのContentControlsをグリッドに追加し、ContentControlのGrid.RowプロパティとGrid.Columnプロパティを各オブジェクトのプロパティにバインドし、DataContextをオブジェクト自体に設定し、ContentTemplateをResources ["MyTemplate"]に設定します。 (また、任意の削除されたオブジェクトは、対応するContentControlにを見つけ、それを削除するために。)
プロ:簡単
コン:.csファイル、なしデザイナサポート

オプション2:
... V.へのItemsControlをItemPanelTemplateをGridに設定し、ObservableCollectionをItemsSourceにバインドします。 ItemTemplateをMyTemplateに設定します。ここでは、あなたの値に基づいて、正しいセルに項目を入れることです。そのためには、ItemsControlのItemContainerStyleプロパティを使用し、コンテナのGrid.RowとColumnをそれらのプロパティにバインドします。
プロ:素敵なXAMLと容易に拡張
コン:後者の場合には、あなたは忘れることができますのでItemContainerStyleは、WPFでのトリッキーなとSilverlightで行方不明であること

オプション3:
...カスタムあなたが書いたパネル。グリッドからおそらくそれを継承する。要素が置かれている場合よりも、DataContextがプロパティを含むインタフェースを実装しているかどうかを確認してください。その後 プロ...オプション2にItemsPanelとして
をこれを使用する:あなたはこのために新しいパネルを記述する必要が...

うまくいけば、これらの3の1があなたのためにOKになります。それは完全に
コン動作するはずです。

+0

ありがとう、私はオプション3と一緒に行くと思います。 – Androme