c#開發移動APP-Xamarin入門擴充套件剖析
上節將Phoneword應用程式擴充套件到包含第二個螢幕,該螢幕可以跟蹤應用程式的撥打歷史
Navigation
Xamarin.Form提供了一個內建的導航模型,用於管理一堆頁面的導航和使用者體驗,這個模型實現了Page物件的後進先出(LIFO)堆疊,要從一個頁面移動到另一個頁面,應用程式將把一個新頁面推到這個堆疊上,要返回到前一個頁面,應用程式將從堆疊中彈出當前頁面。
Xamarin.Forms有一個NavigationPage類,用於管理Page物件的堆疊,NavigationPage類還將在頁面頂部新增一個導航欄,該欄將顯示標題和與平臺相匹配返回到前一個頁面回退按鈕,下面的程式碼示例展示瞭如何用
public App () { ... MainPage = new NavigationPage (new MainPage ()); }
所有ContentPage例項都有一個Navigation屬性,該屬性公開了修改頁面堆疊的方法。只有當應用程式包含NavigationPage時,才能呼叫這些方法。要導航到CallHistoryPage,需要呼叫PushAsync方法,如下面的程式碼示例所示:
async void OnCallHistory(object sender, EventArgs e) {await Navigation.PushAsync (new CallHistoryPage ()); }
這將導致新的CallHistoryPage物件被推送到導航堆疊上。要以程式設計方式返回到原始頁面,CallHistoryPage物件必須呼叫PopAsync方法,如下面的程式碼示例所示:
await Navigation.PopAsync();//彈出當前頁
Data Binding
資料繫結用於簡化Xamarin.Form應用程式顯示及與資料互動。它在使用者介面和底層應用程式之間建立了連線。BindableObject類包含了很多支援資料繫結的基礎設施。資料繫結定義了兩個物件之間的關係。源物件將提供資料。目標物件將使用
PhoneNumbers集合是在App類中宣告和初始化的,
public partial class App : Application { public static List<string> PhoneNumbers { get; set; } public App () { PhoneNumbers = new List<string>(); ... } ... }
ListView例項在CallHistoryPage類中宣告並初始化,
<?xml version="1.0" encoding="UTF-8"?> <ContentPage ... xmlns:local="clr-namespace:Phoneword;assembly=Phoneword" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" ...> ... <ContentPage.Content> ... <ListView ItemsSource="{x:Static local:App.PhoneNumbers}" /> ... </ContentPage.Content> </ContentPage>
在本例中,ListView控制元件將顯示ItemsSource屬性繫結的IEnumerable資料集合。集合可以是任何型別的物件,但預設情況下,ListView將使用每個項的ToString方法來顯示該項。x:Static靜態標記擴充套件用於指示ItemsSource屬性將繫結到App類的靜態PhoneNumbers屬性,該屬性可以在local名稱空間中找到