2012-02-17 24 views
1

グリッドを別のグリッドに動的に追加するにはどうすればよいですか?私はこれを行うことはできません:MVVMを使用してグリッドにグリッドを追加する方法

myGrid.Children.Add(dg); 

私はこのグリッドのインスタンスを持っていないので、私はMVVMを使用しています。

お願いします。

答えて

2

あなたはMVVMを言及するので、私はあなたのビューモデルから、これを達成したいことを、仮定?その場合

私の提案は、ビューにビューモデルからメッセージを送信することです。 ビューでは、このメッセージにサブスクリプションを追加し、そこからグリッドを追加します。

これは、最も単純な形式で、このようにすることができます。これは、優れたMVVM Light frameworkを使用して次のようになります。

ViewModel.cs:

private void CreateGrid() 
{ 
    Messenger.Default.Send<NotificationMessage>(new NotificationMessage("CreateGrid")); 
} 

View.xaml.cs:

Messenger.Default.Register<NotificationMessage>(this, nm => 
{ 
    if (nm.Notification != "CreateGrid") return; 
    // Create grid here 
}); 
1

あなたは、実行時に動的にコントロールを追加する場合は、短い答えは、おそらくMVVM経由でそれを行うに成功するつもりはないされているということです。それをコードビハインドにドロップするのが最善の策かもしれません。ビルドしているアプリケーションの種類を知らなくても、MVVMを使用しなければならないと判断して大声で要求するのは難しいです。言われていること

、私はめったに私はそのような動的制御操作を行う必要がありますWPFの状況で自分自身を見つけることはありません。代わりに、別のWPFコンストラクト(ListBox、ContentControl、ItemsControlなど)を使用して、ItemTemplatesなどのものを使用して、必要なものを取得します。

は再び、あなたが達成しようとしているものについての詳細を知らなくても、それは規範的なガイダンスのいずれかの種類を与えることは困難です。

+0

コードの記述はビハインドそれがMVVMを使用することはできませんという意味ではありません。コードビハインドがビューにのみ関連している限り(実行時にコントロールを作成することは、ビューに完全に関連しています)、IMOでは完全にパターンが適用されます。 – ken2k

+0

@ ken2k私は同意します。元のポストはMVVMの観点からそれを達成する方法を尋ねていました。それが私のやり方に答えた理由です。私は、コードビハインドの使用がアプリケーションのどこかでMVVMアプローチの実装を取り除くとは思わない。 – Robaticus

関連する問題