Windows Phone 7 - 页面间传值

本文介绍了在页面间导航时传递参数的三种方式:QueryString、全局变量和独立存储,并详细讲解了QueryString和全局变量的具体实现。

在页面间导航时传递参数的方式大致有3种,QueryString,全局变量和独立存储。本文只介绍前两种传值方式。

一.QueryString方式

 

在页面1中的Button事件处理程序中添加了如下代码:
 
程序运行时这个Uri是这样的:”/SubPage.xaml?InputText=Hello, Windows Phone 7!” 它的形式和HTML中的查询字符串
(Query String)一样,如果要传递多个参数,可以用&来合并,例如:
”/SubPage.xaml?InputText=Hello, Windows Phone 7!&Name=Zhang Yin”。
页面2中Button的Click事件处理程序代码如下:
 
并且我在页面2中重写了OnNavigatedTo方法。OnNavigatedTo方法是定义在Page类中的,
所以PhoneApplicationPage也继承了此方法,它是一个Virtual方法,所以需要用override关键字重写。
OnNavigatedTo在页面被创建后马上会被调用,也就是说在OnNavigatedTo 方法被调用时,页面的构造函数已经执行完毕了。
类似的还有OnNavigatedFrom方法,它是在离开当前页面时触发的。
页面2中OnNavigatedTo方法内的代码如下:
 
Page类定义了一个类型为NavigationContext的NavigationContext属性,它包含一个类型为IDictionary<string, string>的
QueryString属性。判空检测后,将InputText键对应的值赋给文本框的Text属性。
最后触发基类的OnNavigatedTo方法以保证基类的功能正常。当然也可以使用下面的代码,效果是一样的:
 
通过QueryString虽然可以向一个页面传递参数,但却无法回传数据,例如我在页面2中将文本修改为“Windows Phone 7!”,
然后点击“前往第1页”按钮,得到的还是初始的那个页面。要解决这个问题,就需要使用全局变量了。

二.全局变量

对于全局变量来说,我们可以在项目中添加一个在整个程序生命周期中都能访问到的类,将相应的数据保存在这个类的属性里。

不过现在我们不用自己动手做这些额外的工作了。项目中本身就有一个类满足这个需求:App类。 App 类继承自Application类。

通过Application的Current属性就可以获取到与当前程序关联的Application类实例,然后通 过转换就可以得到App类实例。

程序中所有的页面都可以访问到这个App类,所以将我们要保存的数据放到App类中是最好不过了,免去了自己实现的麻烦。

在App类中添加一个公有的InputText属性(C# 3.0的自动属性) :

页面1中的代码如下:

我在OnNavigatedTo方法内,读取App类的InputText值,为的是当在页面2中修改了文本后可以反映到页面1中。

注意:OnNavigatedTo方法是在当前页面被激活(成为活动页面)时调用的。

在OnNavigatedFrom方法中将文本框赋给App类的InputText属性,供页面2去读取。

页面2中的代码如下:

页面2中的操作与页面1类似。这样,当我们再次将页面2中的文本修改为“Windows Phone 7!”,然后点击“前往第1页”按钮时,

就可以得到想要的结果了。

 

三.PhoneApplicationService类

类似于App类,我们还可以将要在多个页面中访问的数据保存在PhoneApplicationService的State属性中。

它的类型是IDictionary<string, object>,所以我们可以保存任意对象,不过前提是这个对象是可序列化的(serializable)。

在程序中,我们无需自己创建的实例,通过PhoneApplicationService的静态属性Current就可以获取到已有的实例。

注意:在程序中访问PhoneApplicationService类需要添加下面的名称空间:

using  Microsoft.Phone.Shell;

程序代码如下,页面1中的代码如下:

页面2中的代码如下:

四.关于OnNavigatedTo和OnNavigatedFrom方法

我觉得这两个方法的名字起的不太好,有时候容易混淆,如果把OnNavigatedTo改为OnNavigatedToThisPageFromOther,

把OnNavigatedFrom改为OnNavigatedFromThisPageToOther就会很清晰了,当然这只是帮助我们记忆的一种方法了。

下面是MSDN中对这两个方法的一些建议:

OnNavigatedTo:重写 OnNavigatedTo 方法以检查导航请求并且准备供显示的页面。

例如,可以加载请求的数据并且启用或禁用可视化元素。通常是使用 OnNavigatedTo 方法,而非为 Loaded 事件创建事件处理程序

最好使用 OnNavigatedTo 方法,因为只在每次页面成为活动页面时调用该方法一次。

Silverlight 框架在每次将元素添加到可视化树时引发 Loaded 事件,在激活某一页面时该事件可能会多次发生。

OnNavigatedFrom:重写 OnNavigatedFrom 方法以便在页面成为非活动时对该页面执行最后的操作。

例如,可以更新与该页面相关的数据。通常是使用 OnNavigatedFrom 方法,而非为 Navigated 事件创建事件处理程序

最好使用 OnNavigatedFrom 方法,因为不必再从 NavigationService 对象移除事件处理程序以避免对象生存期问题。

 

 

先展示下效果 https://pan.quark.cn/s/e81b877737c1 Node.js 是一种基于 Chrome V8 引擎的 JavaScript 执行环境,它使开发者能够在服务器端执行 JavaScript 编程,显著促进了全栈开发的应用普及。 在 Node.js 的开发流程中,`node_modules` 文件夹用于存储所有依赖的模块,随着项目的进展,该文件夹可能会变得异常庞大,其中包含了众多可能已不再需要的文件和文件夹,这不仅会消耗大量的硬盘空,还可能减慢项目的加载时。 `ModClean 2.0` 正是为了应对这一挑战而设计的工具。 `ModClean` 是一款用于清理 `node_modules` 的软件,其核心功能是移除那些不再被使用的文件和文件夹,从而确保项目的整洁性和运行效率。 `ModClean 2.0` 是此工具的改进版本,在原有功能上增加了更多特性,从而提高了清理工作的效率和精确度。 在 `ModClean 2.0` 中,用户可以设置清理规则,例如排除特定的模块或文件类型,以防止误删重要文件。 该工具通常会保留项目所依赖的核心模块,但会移除测试、文档、示例代码等非运行时必需的部分。 通过这种方式,`ModClean` 能够协助开发者优化项目结构,减少不必要的依赖,加快项目的构建速度。 使用 `ModClean` 的步骤大致如下:1. 需要先安装 `ModClean`,在项目的根目录中执行以下命令: ``` npm install modclean -g ```2. 创建配置文件 `.modcleanrc.json` 或 `.modcleanrc.js`,设定希望清理的规则。 比如,可能需要忽略 `LICENSE` 文件或整个 `docs`...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值