MainViewModelとQuestionViewModelの2つのViewModelがあります。ViewModelLocatorに登録します。
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<QuestionViewModel>();
MainViewModelには、質問のあるリストボックスがあります。クリックするとこのコマンドを実行します
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の2回目のオープンでのみ機能します。私の質問は次のとおりです。MVVMLightでQuestionViewModelのインスタンスをいつどこで作成する必要がありますか?起動時にすべてのページを作成したくありません。
次に、コンストラクターViewModelLocatorでインスタンスを作成します。
public ViewModelLocator()
{
ServiceLocator.Current.GetInstance<QuestionViewModel>();
}
それは良い習慣ですか?