上一篇博文简单的介绍了一下wp如何实现页面跳转,显然光实现跳转没有任何意义,这里介绍一下wp页面传值。
wp页面间传值的实现方式大致有3种,QueryString,全局变量和独立存储。其中QueryString和全局变量的生存期都是当前进程,而独立存储的生存期却不受程序是否运行
限制。由于独立存储属于一个比较单独且常用的技术,我会在后面单独写一篇博客进行介绍。
首先:QueryString方式
QuerString方式,即使用字符串常量实现页面间值的传递。
例如: this.NavigationService.Navigate(new Uri("/Page1.xaml?value=ASD",UriKind.Relative));
首先进行页面布局:
处理MainPage.xaml中Button的Click事件:
private void mb_Click_1(object sender, RoutedEventArgs e)
{
string uri = "/Page1.xaml";
uri += string.Format("?Input1={0}", mt.Text);
this.NavigationService.Navigate(new Uri(uri, UriKind.Relative));
}
程序运行时 Uri 是这样的:”/Page1.xaml?Input=……”如果要传递多个参数,可以用&来合并,例如:”/Page1.xaml?Input1=……&Input2=……”
Page1.xaml.cs中重写OnNavigatedTo函数实现接收值和TextBox属性Text的赋值工作:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string value = string.Empty;
IDictionary<string, string> queryString = this.NavigationContext.QueryString;
if (queryString.ContainsKey("Input1"))
{
pt.Text = queryString["Input1"];
}
base.OnNavigatedTo(e);
}
效果:
QueryString方式适用于简单、单向的页面传值,因为QueryString方式不能回传数据。
要解决回传数据的问题,最好是学习全局变量的使用。
其次全局变量:
对于全局变量来说,我们可以在项目中添加一个在整个程序生命周期中都能访问到的类,将相应的数据保存在这个类的属性里。不过现在我们不用自己动手做这些额外的工作了。项目中本身就有一个类满足这个需求:App类。 App 类继承自Application类。通过Application的Current属性就可以获取到与当前程序关联的Application类实例,然后通 过转换就可以得到App类实例。程序中所有的页面都可以访问到这个App类,所以将我们要保存的数据放到App类中是最好不过了,免去了自己实现的麻烦。在App类中添加一个公有的InputString属性:
要使用全局变量,添加下面代码:
App app = Application.Current as App;
处理MainPage.xaml页面的Button的Click事件
private void mb_Click_1(object sender, RoutedEventArgs e)
{
App app = Application.Current as App;
app.InputString = mt.Text;
this.NavigationService.Navigate(new Uri("/Pgae1.xaml", UriKind.Relative));
}
Page1.xaml.cs中重写OnNavigatedTo函数实现接收值和TextBox属性Text的赋值工作:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
App app = Application.Current as App;
pt.Text = app.InputString;
base.OnNavigatedTo(e);
}
效果如下:
以上QueryString和全局变量两种页面传值的方法基本可以满足的页面传值操作。
这里说一下自己学习移动开发的经验,刚开始学习移动开发时基本什么都不懂,看见许多“大神”可以用许多种方法实现某个功能时真是由心地佩服。
为了向“大神”看起,每次遇到问题我都尽量用不同的方法去实现。但是随着开发时间的慢慢加长我发现这是一种非常不好的习惯,事实上对于不同的
问题应该有不同的解决方式,并且不同的解决方式有不同的优缺点。开发时应尽量使用熟练、高效的方式解决问题,不应该盲目地以解决问题的
方案个数为目标。
2013/5/16