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 type為MainPage
,這表示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
});
參考