web-dev-qa-db-ja.com

MVVM Light Messenger-オブジェクトの送信と登録

MVVM Lightのメッセンジャーを使用してクラス間でカスタムオブジェクトを送信および登録する方法の例を教えてくれる人がいますか、これをカバーするチュートリアルを教えてください(できれば具体的な例)?私はメッセンジャーを使用してプロジェクト内のオブジェクトを別のクラスに渡そうとしましたが、成功していませんでした。オンラインで例を探しましたが、必要なものを示すものが見つかりませんでした。ありがとう。

32
Jason D

MicrosoftのJesse Libertyは、MVVM Light内でメッセージングを活用する方法について、すばらしい 具体的なウォークスルー を持っています。前提は、メッセージタイプとして機能するクラスを作成し、サブスクライブしてから公開することです。

public class GoToPageMessage
{
   public string PageName { get; set; }
}

これは本質的に上記のタイプ/クラスに基づいてメッセージを送信します...

private object GoToPage2()
{
   var msg = new GoToPageMessage() { PageName = "Page2" };
   Messenger.Default.Send<GoToPageMessage>( msg );
   return null;
}

これで、上記で定義したのと同じクラスである特定のメッセージタイプに登録し、このインスタンスReceiveMessageで、メッセージを受信したときに呼び出されるメソッドを提供できます。

Messenger.Default.Register<GoToPageMessage>
( 
     this, 
     ( action ) => ReceiveMessage( action ) 
);

private object ReceiveMessage( GoToPageMessage action )
{
   StringBuilder sb = new StringBuilder( "/Views/" );
   sb.Append( action.PageName );
   sb.Append( ".xaml" );
   NavigationService.Navigate( 
      new System.Uri( sb.ToString(), 
            System.UriKind.Relative ) );
   return null;
}
59
Aaron McIver

[〜#〜] this [〜#〜] および [〜#〜] this [〜#〜] が非常に有用であることがわかりました。 2番目の参照については、最後にある[次のページ]ボタンを使用して、作成したサンプルに移動します。

0
Ehsan