私はmvvmlightを使用してSilverlightアプリケーションを構築しています。別のビューモデルまたはユーザーコントロールのコードビハインド内からビューモデルのプロパティまたはコマンドにアクセスする方法を示すコードスニペットはありますか?
簡単だと思いますが、どういうわけか見落としました。
ウエリ
私はmvvmlightを使用してSilverlightアプリケーションを構築しています。別のビューモデルまたはユーザーコントロールのコードビハインド内からビューモデルのプロパティまたはコマンドにアクセスする方法を示すコードスニペットはありますか?
簡単だと思いますが、どういうわけか見落としました。
ウエリ
メッセンジャーを使用してこれを行うことができます。UserViewModelでユーザーを送信します。
Messenger.Send<User>(userInstance);
興味のある人にユーザーを送るだけです。
そして、CardViewModelに受信者を登録します。
Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;});
または、CardViewModelからユーザーに叫ぶためのリクエストを送信することもできます。
Messenger.Send<String, UserViewModel>("Gimme user");
そして、UserViewModelでそれに反応します。
Messenger.Register<String>(this, delegate(String msg)
{
if(msg == "Gimme user")
Messenger.Send<User>(userInstance);
});
(実際のシナリオでは、文字列ではなく列挙型を使用する方が適切です:))
直接応答することもできますが、現時点では確認できません。
これをチェックしてください:Mvvm light Messenger
もう1つの方法は、変更をブロードキャストするRaisePropertyChangedのオーバーロードを使用することです。あなたはこれをするでしょう:
RaisePropertyChanged(() => MyProperty, oldValue, newValue, true);
次に、サブスクライバーで:
Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler);
ここで、TはMyPropertyのタイプです。
乾杯ローラン
問題を調べる別の方法は、「現在ログインしているユーザー」を返すサービスを用意することです。
誰がログインしたかを処理する責任は、とにかくサービスの責任であり、ViewModelsは単純なままです。
ViewModelsは、ビューに対してのみ存在する必要があります。しかし、善良な市民であるため、LaurentやCodeWeaselなどの他のViewModelに支援を提供することもできます。