MvvmLight では、アプリケーション全体のメッセージ ハンドルを格納する一種のグローバルな静的変数である Messenger.Default のほかに、各ビューモデルに MessengerInstance という名前の別の Messenger Handler があることがわかりました。それで、MessengerInstance の使用目的と使用方法について混乱していますか? (ViewModel のみが表示できます --> メッセージを受信して処理するのは誰ですか?)
質問する
1945 次
1 に答える
3
MessengerInstance
RaisePropertyChanged() メソッドによって使用されます。
<summary>
/// Raises the PropertyChanged event if needed, and broadcasts a
/// PropertyChangedMessage using the Messenger instance (or the
/// static default instance if no Messenger instance is available).
///
/// </summary>
/// <typeparam name="T">The type of the property that
/// changed.</typeparam>
/// <param name="propertyName">The name of the property
/// that changed.</param>
/// <param name="oldValue">The property's value before the change
/// occurred.</param>
/// <param name="newValue">The property's value after the change
/// occurred.</param>
/// <param name="broadcast">If true, a PropertyChangedMessage will
/// be broadcasted. If false, only the event will be raised.</param>
protected virtual void RaisePropertyChanged<T>(string propertyName, T oldValue, T
newValue, bool broadcast);
たとえば、ビューモデル B のプロパティで使用できます。
public const string SelectedCommuneName = "SelectedCommune";
private communes selectedCommune;
public communes SelectedCommune
{
get { return selectedCommune; }
set
{
if (selectedCommune == value)
return;
var oldValue = selectedCommune;
selectedCommune = value;
RaisePropertyChanged(SelectedCommuneName, oldValue, value, true);
}
}
それをキャッチして、ビューモデル A で次のように処理します。
Messenger.Default.Register<PropertyChangedMessage<communes>>(this, (nouvelleCommune) =>
{
//Actions to perform
Client.Ville = nouvelleCommune.NewValue.libelle;
Client.CodePays = nouvelleCommune.NewValue.code_pays;
Client.CodePostal = nouvelleCommune.NewValue.code_postal;
});
これが役立つことを願っています:)
于 2012-12-18T09:51:32.000 に答える