原文: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命名空间中找到

c#开发移动APP-Xamarin入门扩展剖析的更多相关文章

  1. c#开发移动APP-Xamarin入门扩展

    原文:c#开发移动APP-Xamarin入门扩展 这节主要演示了如何通过添加第二个屏幕来跟踪应用程序的call历史来扩展Phoneword应用程序.最终如下: 按如下步骤扩展Phoneword 在Ph ...

  2. 如何开发Office平台上的扩展应用(又称为Office 2013 App,Office 2013 Add-Ins,Apps for Office,Office 应用)

    Office 扩展应用(Office Apps,Office 2013 AddIns,Apps for Office)开发 —— 中文文档 继 VBA 和 VSTO 之后, 微软为 Office 平台 ...

  3. 行内人解读开发一个App需要多少钱?

    对于很多互联网的创业者来说,评估前期的创业成本是很重要的.在这几年的创业大潮中,伴随着“互联网+”和“互联网思维”的普及,很多创业项目选择了开发app作为创业项目的载体.在我接触到的很多创业者,找Ap ...

  4. 开发一个 app 有多难?

    171 个回答 默认排序​ 道衍天机 有事情的加微信1293190838找我 1,150 人赞同了该回答 ----------------------------------------------- ...

  5. 跨平台移动APP开发进阶(二)HTML5+、mui开发移动app教程

    前端开发APP,从HBuilder开始~ 序 通过 HTML5 开发移动App 时,会发现HTML5 很多能力不具备.为弥补HTML5 能力的不足,在W3C 中国的指导下成立了www.HTML5Plu ...

  6. Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通

    Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium R ...

  7. HBuilderX 5+APP MUI 入门

    这一套东西是用来开发app的,可以用html.js什么的写app然后给你打包就能安装到手机上,也可以轻易跨端(需要使用vue,然而我还没有熟练). HBuilder:一个敲代码的软件,敲前端代码超级方 ...

  8. Flask开发系列之快速入门

    Flask开发系列之快速入门 文档 一个最小的应用 调试模式 路由 变量规则 构造 URL HTTP 方法 静态文件 模板渲染 访问请求数据 环境局部变量 请求对象 文件上传 Cookies 重定向和 ...

  9. 【转载】用Ionic开发hybrid APP

    使用phonegap开发APP的优劣在此不必细说,快速,简单,跨平台,以及随着iOS,Android本身对webview优化所带来的不错的性能,便是其独有的优势.而且私以为在目前激烈而又变化快速的移动 ...

随机推荐

  1. [Node] Use babel-preset-env with Native Node Features and Also Use Babel Plugins

    In this lesson we'll show how to setup a .babelrc file with presets and plugins. Then create npm scr ...

  2. glide 安装

    glide是go的一个包管理工具 参考了 https://studygolang.com/articles/10453?fr=email 遇到的问题是,用了 go get githubXXXXX去下载 ...

  3. 段的创建表user_segments 分类: H2_ORACLE 2013-08-10 11:13 714人阅读 评论(0) 收藏

    1.段的定义及类型 Oracle中的段(segment)是占用磁盘空间的一个对象,最常见的段类型包括: l  聚簇cluster l  表table l  表分区 tablepartition l  ...

  4. Django之富文本编辑器kindeditor 及上传

    1.什么是富文本编辑器 百度百科(https://baike.baidu.com/item/%E5%AF%8C%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8 ...

  5. 微信开发学习日记(五):weiphp开源框架的bug,公众号权限编辑问题

    最近在研究weiphp,总体感觉还行,bug据说还挺多. 这不,我就遇到一个比较严重影响使用的.感觉不太应该出现这么严重的bug啊. weiphp的微信公众号等级,权限增加和编辑bug,看不到权限列表 ...

  6. linux 登录windows跳板机

    rdesktop -u 用户 -p 密码 ip -r sound:on/off -g 1200:830

  7. 非常实用全面的 C++框架,库类等资源

    这次的资源涉及到了标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等,C++程序员学习必备! Jason frozen : C/C++的Jason解析生成器 Jansson ...

  8. php如何实现万年历的开发(每日一课真是非常有效率)

    php如何实现万年历的开发(每日一课真是非常有效率) 一.总结 一句话总结: 1.判断每月有多少天: 通过data函数来判断,$days=date('t',$firstday); 2.判断每月的第一天 ...

  9. Android中再按一次退出实现

    很多应用中都有一个在用户后退的时候显示"再按一次退出"的提醒,这个怎么实现呢?有两种方式 第一种方式(最常用) long waitTime = 2000; long touchTi ...

  10. 小强的HTML5移动开发之路(40)——jqMobi中实践header定义的几种方式

    一.定义全局的header 这个header是所有panel默认的header,需要在<div id="afui">内部,也就是和<div id="co ...