在 Xamarin.Forms 中使用MessagingCenter傳遞資料…
主題: |
在 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的建構式,並且加入MessageCenter的Subscribe訂閱訊息程式碼(如紅色框所示):
• 接著我們來制訂Send的遞送訊息程式(如紅色框所示):
• 最後我們再來制訂Unsubscribe取消訂閱的程式(綠色框所示),但先得在類別定義中自行加入MainPage的解建構,再將其加入。(但其實沒有寫,也不會影響程式的執行,因為在現在這個例子當中,當MainPage這個物件被結束時,也就是這個App結束執行的時候了。)
• 接下來我們來看看執行的結果,iOS(左)、Android(中)、UWP(右)。
不過,就這個例子而言並沒有任何意義,只是知道MessagingCenter如何使用而已。並還沒有真的透過MessagingCenter來完成我們想要的傳遞資料的動作。
MessagingCenter的程式碼實作(II)
• 接著再繼續在之前的MainPage.xaml上增加一個叫做DisplayLabel的Lable,也再增加另一個叫做GoToSecondPageButton的按鈕,並設置好Clicked事件(綠色框所示)。並且在事先準備好的SecondPage.xaml上增加一個叫PassDataEntry的Entry,以及一個叫CloseButton的按鈕,並且替這個按鈕設置Clicked事件。
MainPage.xaml
SecondPage.xaml
• 再次打開MainPage.cs並找到其MainPage建構方法,來新增一個Subscribe(如紅色框所示)。
• 接著再繼續在GoToSecondPage_Clicked的事件處理常式中加入切換畫面的程式碼(如紅色框所示)。
• 打開SecondPage.xaml.cs,增加一個私有欄位_context,並且新增一個建構方法,並且將此建構方法設計能傳入MainPage型態的參數(如紅色框所示)。
• 接著在CloseButton_Clicked的處理常式中,增加MessagingCenter的Send程式(如紅色框所示)
• 當我們按下GoToSecondPage的按鈕切換到SecondPage後,我們可以輸入一些文字到Entry後,再按下CloseButton。就會回到MainPage,而此時DisplayLabel中就顯示著我們再Entry當中所輸入的文字了。(下圖以Android為展示)
而這只是MessagingCenter的搭配Page的Navigation時來回傳資料的應用,若是在各個平台因為一些特殊的需求而執行一些程式,需要傳遞資料回Xamarin.Forms時也都是可以透過MessagingCenter來完成的。
4. 參考來源
• Publish and Subscribe with MessagingCenter:
https://developer.xamarin.com/guides/xamarin-forms/messaging-center/