欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Windows Phone 7 Tip - 不同页面之间的参数传递

程序员文章站 2024-01-15 09:12:22
  有朋友问起windows phone 7页面导航(page navigation)时,如何在不同页面之间进行传递参数。我们在此整理一下。 windows phone 7的页面间传...

 

有朋友问起windows phone 7页面导航(page navigation)时,如何在不同页面之间进行传递参数。我们在此整理一下。

windows phone 7的页面间传参有三种方式。为了方便描述,我们将场景设定为:从a页面导航到b页面。

 

第一种方法:querystring

这种传参方式继承自传统的网页开发模式。在a界面中,调用navigationservice.navigate() 方法时,所传递的uri不仅仅是b页面的xaml文件地址,还包括字符串格式的参数。具体格式如下:

"/pageb.xaml?param1=stringvalue1&param2=stringvalue2"

 

xaml文件地址后跟一个问号,代表参数声明的开始。多个参数用& 符号间隔。

而在b页面中,需要重载基类的onnavigatedto 方法,并从中获得所传递的参数值,示例代码如下:

string paramvalue1 = navigationcontext.querystring["param1"];

string paramvalue2 = navigationcontext.querystring["param2"]; 

该传参方式简单易用,唯一的不足之处是仅支持字符串类型。

 

第二种方法:全局参数

在app.xaml.cs 文件中的app 类中,定义任意类型的public 属性(例如param3)。

在a页面中,设置该属性变量值,代码如下:

(app.current as app).param3 = somevalue;

在b页面中,访问该变量,代码如下:

somevariable = (app.current as app).param3;

这种传参方式非常灵活,支持全局访问。

 

第三种方法:navigationeventargs.content

其实即将离开a页面时,可以得到前往页面的实例(页面导航时,首先创建b页面的实例,再把当前显示内容从a页面替换为b页面)。因此,我们可以探知导航的目标页面是否是b页面,如果是,就向b页面“注入”一些内容。

a页面代码如下:

protected override void onnavigatedfrom(system.windows.navigation.navigationeventargs e)

{

    var targetpage = e.content as pageb;

    if (targetpage!=null)

    {

        targetpage.param4 = somevalue;

    }

}

 

b页面代码如下:

public paramtype param4 { get; set; }

 

protected override void onnavigatedto(system.windows.navigation.navigationeventargs e)

{

    if (param4 != null)

    {

        textblock3.text = param4.name;

    }

}

该方法同样支持各种参数类型。

 

以上各种参数传递的方式,孰优孰劣,就见仁见智了。

也许还会有人补充说,某些framework(例如prism、mvvmlighttoolkit等) 还支持更多中传参方式(如messaging),但个人感觉那些东东简直”飞机拉马车“,不太适合小规模的手机应用开发。

 

ok,希望对各位有所帮助!代码送上:

下载代码

 

作者: 李靖南email: elecpiano@gmail.com

新浪微博: http://weibo.com/zengnami

msn: zengnami@hotmail.com

qq: 52717278

 

关于作者:

从事微软平台解决方案的设计与实现。主要专注方于silverlight 及windows phone 7 应用开发,及前者与微软云计算平台(azure)的结合。