上節將Phoneword應用程序擴展到包含第二個屏幕,該屏幕能夠跟蹤應用程序的撥打歷史html
Navigation編程
Xamarin.Form提供了一個內置的導航模型,用於管理一堆頁面的導航和用戶體驗,這個模型實現了Page對象的後進先出(LIFO)堆棧,要從一個頁面移動到另外一個頁面,應用程序將把一個新頁面推到這個堆棧上,要返回到前一個頁面,應用程序將從堆棧中彈出當前頁面。c#
Xamarin.Forms有一個NavigationPage類,用於管理Page對象的堆棧,NavigationPage類還將在頁面頂部添加一個導航欄,該欄將顯示標題和與平臺相匹配返回到前一個頁面回退按鈕,下面的代碼示例展現瞭如何用NavigationPage包裹應用程序的第一個頁面。async
public App () { ... MainPage = new NavigationPage (new MainPage ()); }
全部ContentPage實例都有一個Navigation屬性,該屬性公開了修改頁面堆棧的方法。只有當應用程序包含NavigationPage時,才能調用這些方法。要導航到CallHistoryPage,須要調用PushAsync方法,以下面的代碼示例所示:spa
async void OnCallHistory(object sender, EventArgs e) { await Navigation.PushAsync (new CallHistoryPage ()); }
這將致使新的CallHistoryPage對象被推送到導航堆棧上。要以編程方式返回到原始頁面,CallHistoryPage對象必須調用PopAsync方法,以下面的代碼示例所示:code
await Navigation.PopAsync();//彈出當前頁
Data Bindingorm
數據綁定用於簡化Xamarin.Form應用程序顯示及與數據交互。它在用戶界面和底層應用程序之間創建了鏈接。BindableObject類包含了不少支持數據綁定的基礎設施。數據綁定定義了兩個對象之間的關係。源對象將提供數據。目標對象將使用(常常顯示)來自源對象的數據。在Phoneword應用程序中,綁定目標是顯示電話號碼的ListView控件,而PhoneNumbers集合是綁定源。xml
PhoneNumbers集合是在App類中聲明和初始化的,htm
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命名空間中找到