Создание нового экземпляра объекта каждый раз, когда вызывается метод
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 нового окна. У меня проблема в том, что если я выполню это дважды, содержимое первого экземпляра будет перезаписано и будет установлено на содержимое второго, так какadventurerWindowVM
является DataContext обоих окон, и он перезаписывается при каждом вызове этого кода. Я ищу способ предотвратить это; Я хотел бы иметь возможность открывать несколько окон, используя это сообщение, и каждое из них должно быть уникальным, но до сих пор я не нашел способ сделать это. Любой совет будет принята с благодарностью. Я прошу прощения за смутное название; Я не был уверен, что назвать этот вопрос. (Также я знаю, что это не метод. Как будет называться этот блок кода?)
Обновить: Я использую 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>();
}