现在的位置: 首页 > 综合 > 正文

wp 页面传值

2013年10月14日 ⁄ 综合 ⁄ 共 2170字 ⁄ 字号 评论关闭

上一篇博文简单的介绍了一下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












抱歉!评论已关闭.