上节将 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 命名空间中找到
来源: http://www.bubuko.com/infodetail-2815603.html