Xamarin.Forms MessagingCenter

在 Xamarin.Forms 中使用MessagingCenter傳遞資料…

James Tsai 2016/09/30 09:00:00
2117

主題

Xamarin.Forms 中使用MessagingCenter傳遞資料

文章簡介

在使用Xamarin.Forms 時,常會透過MessagingCenter來解決其傳遞資料的問題,但做法常常讓很多剛開始學習Xamarin.Forms 開發者感到困擾,就讓本篇文章教你吧!

作者

James Tsai

版本/產出日期

V1.0/2016.9.28



1. 前言


在Xamarin.Forms 中有一個特殊的MessagingCenter可以來協助我們在Xamarin.Forms中來傳遞資料,本篇文章就來介紹最基本的使用吧~


2. 環境準備


Windows 8/8.1/10

Visual Studio 2015 / Xamarin Studio


3. 本文


MessagingCenter使用時的基本架構介紹


MessagingCenter分成個部分:

Subscribe: 訂閱訊息。

訂閱聆聽傳遞到MessagingCenter上的訊息,在制定訂閱訊息時,會定義要聆聽的訊息簽章(一個可識別值),並且定義當聆聽到該訊息時,要執行的動作(程式)。而可由多個訂閱者(Subscriber)訂閱聆聽同一個訊息。

Send: 訊息

遞送訊息到MessagingCenter,如果該訊息沒有任何訂閱者取走,該訊息就會被忽略(也就是說不會有Exception發生)

Unsubscribe: 取消訂閱。(可不做,但仍建議要做)

當不會再有該訊息傳遞時,應取消該訂閱,以避免造成重複訂閱等問題。


MessagingCenter的程式碼實作(I)


在開始之前,先在事先準備好的MainPage.xaml一個叫做TestButton的按鈕,並且制訂它的Clicked事件。

Xaml :



C# Code :



接著我們在MainPage.xaml.cs當中,找到MainPage的建構式,並且加入MessageCenterSubscribe訂閱訊息程式碼(如紅色框所示):



接著我們來制訂Send的遞送訊息程式(如紅色框所示):



最後我們再來制訂Unsubscribe取消訂閱的程式(綠色框所示),但先得在類別定義中自行加入MainPage的解建構,再將其加入(但其實沒有寫,也不會影響程式的執行,因為在現在這個例子當中,當MainPage這個物件被結束時,也就是這個App結束執行的時候了。)



接下來我們來看看執行的結果,iOS()Android()UWP()



不過,就這個例子而言並沒有任何意義,只是知道MessagingCenter如何使用而已。並還沒有真的透過MessagingCenter來完成我們想要的傳遞資料的動作。


MessagingCenter的程式碼實作(II)


接著再繼續在之前的MainPage.xaml增加一個叫做DisplayLabelLable,也再增加另一個叫做GoToSecondPageButton的按鈕,並設置好Clicked事件(綠色框所示)。並且在事先準備好的SecondPage.xaml增加一個叫PassDataEntryEntry,以及一個叫CloseButton的按鈕,並且替這個按鈕設置Clicked事件。

MainPage.xaml



SecondPage.xaml



再次打開MainPage.cs並找到其MainPage建構方法,來新增一個Subscribe(如紅色框所示)



接著再繼續在GoToSecondPage_Clicked的事件處理常式中加入切換畫面的程式碼(如紅色框所示)



打開SecondPage.xaml.cs,增加一個私有欄位_context,並且新增一個建構方法,並且將此建構方法設計能傳入MainPage型態的參數(如紅色框所示)



接著在CloseButton_Clicked的處理常式中,增加MessagingCenterSend程式(如紅色框所示)



當我們按下GoToSecondPage的按鈕切換到SecondPage後,我們可以輸入一些文字到Entry後,再按下CloseButton。就會回到MainPage,而此時DisplayLabel中就顯示著我們再Entry當中所輸入的文字了。(下圖以Android為展示)




而這只是MessagingCenter的搭配PageNavigation時來回傳資料的應用,若是在各個平台因為一些特殊的需求而執行一些程式,需要傳遞資料回Xamarin.Forms時也都是可以透過MessagingCenter來完成的。


4. 參考來源


Publish and Subscribe with MessagingCenter:
https://developer.xamarin.com/guides/xamarin-forms/messaging-center/



James Tsai