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

有朋友问起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 {  getset; }

protected  override  void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
     if (param4 !=  null)
    {
        textBlock3.Text = param4.Name;
    }

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

 

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

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

 

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

下载代码 

转载于:https://www.cnblogs.com/elecpiano/archive/2011/11/14/2248378.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值