c#开发移动APP-Xamarin入门扩展剖析

简介: 原文:c#开发移动APP-Xamarin入门扩展剖析  上节将Phoneword应用程序扩展到包含第二个屏幕,该屏幕可以跟踪应用程序的拨打历史 Navigation   Xamarin.Form提供了一个内置的导航模型,用于管理一堆页面的导航和用户体验,这个模型实现了Page对象的后进先出(LIFO)堆栈,要从一个页面移动到另一个页面,应用程序将把一个新页面推到这个堆栈上,要返回到前一个页面,应用程序将从堆栈中弹出当前页面。
原文: 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命名空间中找到

 

目录
相关文章
|
6天前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
74 51
|
4天前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
12 1
|
5天前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
20 2
|
14天前
|
测试技术 Go C#
C#一分钟浅谈:ReSharper 插件增强开发效率
【10月更文挑战第25天】ReSharper 是 JetBrains 开发的一款 Visual Studio 插件,旨在提高 .NET 开发者的生产力。它通过代码分析、重构、导航等功能,帮助开发者避免常见错误,提升代码质量和开发效率。本文将通过具体代码案例,详细介绍 ReSharper 的常见功能及其应用。
32 1
|
20天前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
4天前
|
程序员 C# 图形学
全面的C#/.NET自学入门指南
全面的C#/.NET自学入门指南
|
27天前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
33 1
|
JavaScript 前端开发 Android开发
博客园app for xamarin android
碎碎念回顾2017 到了年底,坐在转椅上,望着窗外的雾霾......从16年6月走出校门,已经做了1年半的码农,成长不少,但总觉得进步得不够明显,虽然工资比刚来的时候涨了不少,但是还是觉得自己不够努力。
1711 0
|
30天前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
452 7
|
30天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
504 1