メッセージがViewのコンストラクタに登録されたときに複数回登録されているため、Messageが複数回発生する問題が発生しました。 S.O.投稿、ウェブサイト、ブログには次のような例が表示されます:MvvmLight Messaging - メッセージを登録および登録解除する適切な方法は何ですか?
public ConstructorOfView() {
DataContext = viewModelObject;
Messenger.Default.Register<SomeClass>(recipient, token, method);
}
public someUnloadOrNavigateFromMethod() {
Messenger.Default.Unregister<SomeClass>(parameters and more);
}
登録解除は私にとっては効果がないようです。いくつかの例では、ViewModel内にメッセージを登録すると言います。これは2つの理由から私には意味をなさない:1)ページのDataContextをViewModelに設定すると、ViewModelコンストラクタはビューコンストラクタと同じように2回呼び出される。 2)ViewModelの中にメッセージを登録した場合、メソッドを起動するためにビューをどのくらい正確に宣言しますか? viewmodel内のダイアログのようなUI関連の要素を呼び出す3番目のオプションは、MvvMの概念に違反しているようです。
メッセージを登録および登録解除する適切な方法は何ですか?
投稿の中には、Cleanup()を呼び出すことをお勧めしているものもありますが、どういうわけかメッセージをviewmodelに登録する必要がありますが、メッセージの受信者をviewmodelとして設定すると、ビューで非公開静的メソッドを呼び出して、UIを変更/表示しますか?
返信いただきありがとうございます。一つは私が混乱している。 viewmodelにメッセージを登録すると、ダイアログボックスをviewmodelではなくviewで処理する必要がある場合、ダイアログボックスのようなUIをどのように変更または表示するのですか?それは、ビューモデルの中にメッセージを登録することに関して私にとって意味をなさないものです。 – ShrimpCrackers
私はあなたの疑いを理解しています、何とかそれに同意します。ファクトは、そのための多くのソリューションであり、コードを記述しているプラットフォームにも基づいています。あなたがWindows用のwpfアプリケーションを書いていることを前提にすると、最初のものは:mvvmの過激派ではなく、メッセージハンドラのMessageBox.Showを直接呼び出すことです。私は時々これを行う、それは動作し、それはいくつかのMVVMの原則に違反しますが、コードの何百もの行を保存する可能性があります。第2の方法:ユーザーにメッセージを表示し、メッセージを表示するためにUIコントロールにバインドする方法を再考してください。三番目:ダイアログボックスの代わりに新しいポップアップビューが表示されます。 –