2013-08-06 46 views
6

誰かがMVVM Lightのメッセンジャーについて私のためにとても親切に説明できますか?私はここStackOverflowの投稿を読んでいた:MVVM pass values between view modelsこれを取得しようとしています。この時点でMVVM Lightのドキュメントはそれほど素晴らしいものではありませんので、どこに行くのか完全にわかりません。MVVM Lightのメッセンジャーを使用してビューモデル間で値を渡す

私は2つのViewModelとViewModelLocatorを持っているとします。私は3つの間で問題なくパラメータを渡すことができるようにしたい。私はメッセンジャーでこれをどうやってやりますか?それは可能ですか?

編集:ここに私の新しい実装があります。今のところ、MessengerInstanceがトークンを呼び出さないように見えます。私はひどく混乱している。

MessengerInstance.Send<XDocument>(SelectedDocument); 

そして第二中:最初のViewModelで

MessengerInstance.Register<XDocument>(this, xdoc => CopySettings(xdoc)); 

は完全に間違っているかもしれません。それをテストするチャンスを得ていないが、私がこのようにすると、ビジュアルスタジオは私にあまり怒らない。また、MessengerInstanceは、メッセージが送信される前に登録します。

+0

は、「しかし、Visual Studioが持つ以下怒ります私がこのようにするとき私は "私は。 Ha。それが私を笑わせてくれました。 :) –

答えて

12

私は2つのViewModelとViewModelLocatorを持っています。私は3つの間で問題なくパラメータを渡すことができるようにしたい。私はメッセンジャーでこれをどうやってやりますか?それは可能ですか?

これはまさにそうです。

MessengerInstance.Send(payload, token); 

がメッセージを受信するには:

は、メッセージを送信するには

MessengerInstance.Register<PayloadType>(
    this, token, payload => SomeAction(payload)); 

あなたはメッセンジャー経由で達成しようとしている正確に何を知らなくても、私が勝ったので、多くのオーバーロードがありますが、それらのすべてに入るわけではありませんが、上記は、ペイロードでメッセージを送受信したいという単純なケースをカバーする必要があります。

「トークン」は実際にはメッセージを識別するすべてのものであることに注意してください。文字列は、多くの場合、このために使用されている間、私はそれが少しより安全だとインテリセンスが可能になるため列挙型を使用することを好む、「使用状況を検索」など

例えば:

public enum MessengerToken 
{ 
    BrushChanged, 
    WidthChanged, 
    HeightChanged 
} 

次に、あなたの送信は、受信/ようなものになるでしょう:

// sending view model 
MessengerInstance.Send(Brushes.Red, MessengerToken.BrushChanged); 

// receiving view model 

// put this line in the constructor 
MessengerInstance.Register<Brush>(this, token, brush => ChangeColor(brush)); 

public void ChangeColor(Brush brush) 
{ 
    Brush = brush; 
} 

[EDIT] devuxerさんのコメントへのURLは以下に変更: http://blog.galasoft.ch/posts/2009/09/mvvm-light-toolkit-messenger-v2/

+0

これは完璧です!私はこれに関する文書を検索しようとしましたが、何も見つかりませんでした。私が紛失している可能性のあるドキュメントを知っていますか? MVVM Lightについてはほとんど見たことがありません。 – DanteTheEgregore

+0

MVVM Light、Laurent Bugnionを開発した人は、自分のブログを使用して新機能や機能のアップデートを導入する傾向があります。ここにあなたが役に立つかもしれないメッセンジャーの特定のエントリがあります:http://blog.galasoft.ch/lbugnion/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta。aspx – devuxer

+0

私は手術のために外出していましたが、今日までこれを実装する機会はありませんでした。 MessengerInstanceがトークンを要求する場所はわかりません。実装をメインポストに追加します。また別の質問をここに掲載しました:http://stackoverflow.com/questions/18241290/mvvm-light-messenger-not-functioning-as-expected/18241995?noredirect=1#18241995 – DanteTheEgregore

関連する問題