1. 程式人生 > >c#開發移動APP-Xamarin入門擴充套件剖析

c#開發移動APP-Xamarin入門擴充套件剖析

  上節將Phoneword應用程式擴充套件到包含第二個螢幕,該螢幕可以跟蹤應用程式的撥打歷史

Navigation

  Xamarin.Form提供了一個內建的導航模型,用於管理一堆頁面的導航和使用者體驗,這個模型實現了Page物件的後進先出(LIFO)堆疊,要從一個頁面移動到另一個頁面,應用程式將把一個新頁面推到這個堆疊上,要返回到前一個頁面,應用程式將從堆疊中彈出當前頁面。

  Xamarin.Forms有一個NavigationPage類,用於管理Page物件的堆疊,NavigationPage類還將在頁面頂部新增一個導航欄,該欄將顯示標題和與平臺相匹配返回到前一個頁面回退按鈕,下面的程式碼示例展示瞭如何用

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類包含了很多支援資料繫結的基礎設施。資料繫結定義了兩個物件之間的關係。源物件將提供資料。目標物件將使用

(經常顯示)來自源物件的資料。在Phoneword應用程式中,繫結目標是顯示電話號碼的ListView控制元件,而PhoneNumbers集合是繫結源。

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名稱空間中找到