我有两个的ViewModels:MainViewModel和QuestionViewModel。 我注册他们ViewModelLocator。
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<QuestionViewModel>();
在MainViewModel我有一个问题,一个ListBox。 当点击我执行此命令
NavigationService.NavigateTo(new Uri("/Pages/QuestionPage.xaml", UriKind.Relative));
Messenger.Default.Send<Question, QuestionViewModel>(q);
QuestionPage的DataContext的设置为QuestionViewModel。 在QuestionViewModel我注册信息:
Messenger.Default.Register<Question>(this, q =>
{
MessageBox.Show("!");
});
但是,只有在QuestionViewModel的第二个开放此功能的工作,因为QuestionViewModel实例都仅在第一开口造成的。 我的问题是:在哪里,当我需要在MVVM光创建QuestionViewModel的实例? 我不想在启动时创建我的所有网页。
现在,我创建实例在构造ViewModelLocator:
public ViewModelLocator()
{
ServiceLocator.Current.GetInstance<QuestionViewModel>();
}
这是很好的做法?