Messenger.Default.Register<OpenWindowMessage>(this, message =>
{
var adventurerWindowVM = SimpleIoc.Default.GetInstance<AdventurerViewModel>();
adventurerWindowVM.Adv = message.Argument;
var adventurerWindow = new AdventurerView()
{
DataContext = adventurerWindowVM
};
adventurerWindow.Show();
});
このコードはかなり単純です。新しいウィンドウを開き、新しいウィンドウの DataContext を設定するだけです。私が抱えている問題は、これを 2 回実行するとadventurerWindowVM
、両方のウィンドウの DataContext であり、このコードが呼び出されるたびに上書きされるため、最初のインスタンスの内容が上書きされ、2 番目のインスタンスの内容に設定されることです。これを防ぐ方法を探しています。このメッセージを使用して複数のウィンドウを開き、それぞれを一意にしたいのですが、これまでのところ、その方法がわかりません。アドバイスをいただければ幸いです。あいまいなタイトルで申し訳ありません。私はこの質問に何と名前を付けるべきか確信が持てませんでした。(また、これがメソッドではないことも知っています。このコード ブロックは何と呼ばれますか?)
更新:私は MVVM Light を使用しています。私のコードは、この回答で誰かが私に提供した例に基づいています: https://stackoverflow.com/a/16994523/1667020
ここに私の ViewModelLocator.cs からのいくつかのコードがあります
public ViewModelLocator()
{
_main = new MainViewModel();
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<GameViewModel>();
SimpleIoc.Default.Register<AdventurerViewModel>();
}