[Xamarin][筆記]簡介MessagingCenter

  • 592
  • 0

Xamarin.Forms 提供一個message傳遞機制,以供view model, component之間低耦合的進行message的訂閱及傳送。這可以讓不同頁面,不同元件之間可以簡便的通知某個事件發生了,或是進行資料的傳遞。這個機制就是MessagingCenter

 

MessagingCenter有兩個動作:

  • Send - 發布Message給訂閱者(Listener)
  • Subscribe - 訂閱(Lsiten)某個特定的訊息

MessagingCenter的API很簡單,就是底下這六個:

  • Subscribe (object subscriber, string message, Action callback, TSender source = null)
  • Subscribe<TSender, TArgs> (object subscriber, string message, Action<TSender, TArgs> callback, TSender source = null)
  • Send (TSender sender, string message)
  • Send<TSender, TArgs> (TSender sender, string message, TArgs args)
  • Unsubscribe<TSender, TArgs> (object subscriber, string message)
  • Unsubscribe (object subscriber, string message)

使用MessagingCenter

最簡單的Message是只有一generic typeMainPage,這表示sender的型別就是MainPage。在Solution中的任何class都可以使用以下的語法訂閱message。

MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => {
    // do something whenever the "Hi" message is sent
});

MainPage中,就會使用以下的程式碼送訊息

MessagingCenter.Send<MainPage> (this, "Hi");

其中的字串是一種message type的概念,他是一個固定字串。這類型的的message主要是用來指出某個事件已經發生了,例如"upload completed"。

傳遞參數

如果要在message中傳遞一些參數資料,則會使用以下的方式

MessagingCenter.Send<MainPage, int> (this, "Hi", 100);

而接受方可以使用以下的多載method取得參數值,並進行後續的處理

MessagingCenter.Subscribe<MainPage, int> (this, "Hi", (sender, arg) => {
    // do something whenever the "Hi" message is sent
    // using the 'arg' parameter which is a string
});

參考