我有两个 ViewModel: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 Light 中创建 QuestionViewModel 实例?我不想在启动时创建所有页面。
现在,我在构造函数 ViewModelLocator 中创建实例:
public ViewModelLocator()
{
ServiceLocator.Current.GetInstance<QuestionViewModel>();
}
这是好习惯吗?