wp7-页面值传递及小生命周期(xaml页跟xaml页之间的值传递)

xaml页跟xaml页之间的值传递:

向Page1页面中传递值:

 代码如下 复制代码
   NavigationService.Navigate(new Uri("/Page1.xaml?name=" + txtName.Text, UriKind.Relative));

  

在page1中接受传递过来的值

 代码如下 复制代码
 textBlock1.Text=  NavigationContext.QueryString["name"];

 当我们传递比较复杂的值的时候 就不能像上面那样简单的传递,比如a=b&c=d,我们就要考虑用EscapeDataString来进行转义后在传递

 代码如下 复制代码
   NavigationService.Navigate(new Uri("/Page1.xaml?name="+Uri.EscapeDataString("a=b&c=d") , UriKind.Relative));

当我们需要传递一个比上面还要复杂的对象怎么办呢?比如我们需要传递的是一个Buttun按钮

 代码如下 复制代码

 private void button1_Click(object sender, RoutedEventArgs e)
         {
             NavigationService.Navigate(new Uri("/Page1.xaml?name="+Uri.EscapeDataString("a=b&c=d") , UriKind.Relative));
             Page1.btn = button1;
         }
 
 
   public static Button btn;
         private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
         {
             textBlock1.Text = (string)btn.Content;
         }
 

 

这样就把前一个页面的Button按钮对象传递过来了 !非常的灵活

 代码如下 复制代码
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
         {
             MessageBox.Show("PhoneApplicationPage_Loaded");
           
         }
         protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
         {
                 base.OnNavigatedTo(e);
                 MessageBox.Show("OnNavigatedTo");
         }
         protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
         {
                 base.OnNavigatedFrom(e);
                 MessageBox.Show("OnNavigatedFrom");
         }
         protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
         {
                 base.OnNavigatingFrom(e);
                 MessageBox.Show("OnNavigatingFrom--Cancel");
         }
         protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
         {
                 base.OnBackKeyPress(e);
                 MessageBox.Show("OnBackKeyPress");
           }

执行的顺序是

加载时

OnNavigatedTo  页面变为活动页面时调用

PhoneApplicationPage_Loaded 

退出时:

OnBackKeyPress 设备硬件按下后退?是调用

OnNavigatingFrom--Cancel  刚好在页面不在是活动页面之前时调用

OnNavigatedFrom 在页面不在是活动页面时调用

 

OnBackKeyPress 的妙用:当我们在程序中弹出一个消息框时。如果直接在手机硬件上按后退?会直接退出程序,,这个时候我们就可以在OnBackKeyPress 这个方法中把后退的命令改成关闭消息框的命令!

 

服务端跟xaml页面的值传递

我们先简单的配置下服务端Handler.ashx:

 代码如下 复制代码
string action = context.Request["action"];
         if (action == "login")
         {
             string username = context.Request["username"];
             string password = context.Request["password"];
             if (username == "admin" && password == "123")
             {
                 context.Response.Write("ok");
             }
             else
             {
                 context.Response.Write("error");
             }
         }

简单的设计一个登陆的界面;

给登录注册点击事件

 代码如下 复制代码
private void button1_Click(object sender, RoutedEventArgs e)
         {
             WebClient wc = new WebClient();
             wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
             wc.DownloadStringAsync(new Uri("http://192.168.1.98:1174/WebSite14/Handler.ashx?action=login&username=" + Uri.EscapeDataString(textBox1.Text) + "&password=" + Uri.EscapeDataString(textBox2.Text)));
         }
 
         void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
         {
             if (e.Error != null)
             {
                 MessageBox.Show("错误");
             }
             else
                 if (e.Result == "ok")
                 {
                     MessageBox.Show("登录成功");
                 }
                 else
                     if (e.Result == "error")
                     {
                         MessageBox.Show("登录失败");
                     }
                     else
                     {
                         MessageBox.Show("未知错误");
                     }
         }
 

这里要注意的是IP地址不能写127.0.0.1 或Localhost,因为手机跟电脑连接就自动构成一个局域网,并且手机自己本身就是个小电脑,Localhost就相当于访问手机自己

如果你是用手机跟电脑连接,或者模拟器跟电脑连接,则需要假设IIS,当然端口映射下也行,也可以设置下CassiniDev服务器,设置成any,允许外网访问。

 

假如我们要向手机客户端发送json数据呢。该怎么来接收并解析?

 代码如下 复制代码
 string action = context.Request["action"];
       
         if (action=="test")
         {
             List<person> list = new List<person>();
             list.Add(new person { age=18,name="yzk" });
             list.Add(new person { name="zxh",age=17 });
             JavaScriptSerializer js=new JavaScriptSerializer();
          string json=   js.Serialize(list);
             context.Response.Write(json);
         }
     }
 
     public bool IsReusable {
         get {
             return false;
         }
     }
     public class person
     {
         public string name
         {
             get;
             set;
         }
         public int age
         {
             get;
             set;
         }
     }

 

然后我们在客户端接受json数据-在界面上托一个按钮并注册点击事件

 代码如下 复制代码

 private void button2_Click(object sender, RoutedEventArgs e)
         {
             WebClient sc = new WebClient();
             sc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(sc_DownloadStringCompleted);
             sc.DownloadStringAsync(new Uri("http://192.168.1.98:1174/WebSite14/Handler.ashx?action=test"));
         }
 
         void sc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
         {
             if (e.Error != null)
             {
                 MessageBox.Show("错误");
             }
             else
             {
                 string json = e.Result;
                 List<person> list = new List<person>();
                 JArray persons = (JArray)JsonConvert.DeserializeObject(json);
               foreach (var item in persons)
               {
                   string name=item["name"].ToString();
                   int age = int.Parse(item["age"].ToString());
               }
             }
         }
     }
     public class person : DependencyObject
     {
 
 
         public int age
         {
             get { return (int)GetValue(ageProperty); }
             set { SetValue(ageProperty, value); }
         }
 
         // Using a DependencyProperty as the backing store for age.  This enables animation, styling, binding, etc...
         public static readonly DependencyProperty ageProperty =
             DependencyProperty.Register("age", typeof(int), typeof(person), null);
 
 
         public string name
         {
             get { return (string)GetValue(nameProperty); }
             set { SetValue(nameProperty, value); }
         }
 
         // Using a DependencyProperty as the backing store for name.  This enables animation, styling, binding, etc...
         public static readonly DependencyProperty nameProperty =
             DependencyProperty.Register("name", typeof(string), typeof(person), null);
 
 
 
     }

 

这里解析服务端发送过来的数据,我们要引用Newtonsoft.Json.dll来帮我们解析

时间: 2024-11-15 00:23:28

wp7-页面值传递及小生命周期(xaml页跟xaml页之间的值传递)的相关文章

ASP.NET 2.0 页(Page)生命周期概述

原文:ASP.NET 2.0 页(Page)生命周期概述 引用MSDNASP.NET 页生命周期概述 ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行 呈现.了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果.此外,如果您要开发自定义控件,就必须熟悉页生命周期, 以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行任何控件行为代码.(控件的生命

2000条你应知的WPF小姿势 基础篇&lt;22-27 WPF生命周期, 基础类等&gt;

原文:2000条你应知的WPF小姿势 基础篇<22-27 WPF生命周期, 基础类等> 端午长假在家陪着女朋友, 幸福感满满,生活对于一只饱经忧患的程序猿来说也是非常重要的,也就暂时没有更新博客.休假结束,回归奋斗的日子了,开始继续更新WPF系列. 在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C#  和 2,000 Things You Should Kn

Microsoft .Net Remoting系列教程之二:Marshal、Disconnect与生命周期以及跟踪服务_自学过程

一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是将该远程对象注册到通道中.由于Remoting没有提供与之对应的Unregister方法来注销远程对象,所以如果需要注册/注销指定对象,微软推荐使用Marshal(一般译为编组)和Disconnect配对使用.在<Net Remoting基础篇>中我已经谈到:Marshal()方法是将MarshalByRefObject类对象转化为ObjRef类对象,这个

艾伟_转载:温习:ASP.NET页面生命周期

ASP.NET 页面生命周期虽然是最基础的东东,但我发现很多人不能准确地的说出,可能多数程序人员只是对深层技术感兴趣的原因吧?可是如果忘记了最基础的东西,有时会给你的开发制造很大的麻烦.现在把MSDN上的ASP.NET页面生命周期贴出来,大家温习一下吧(温习之前请问一下自己你知道吗): ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行呈现.了解页生命周期非常重要,因为这样做您就能在生命

page类与页面生命周期

一.   Asp.Net整个页面生命周期其实是一系列事件来完成的. 1. 当一个页面请求到达IIS后,IIS(只能处理静态页面,文本和一些图片)处理不了就交给.net核心处理程序(aspnet_isapi). 2.步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行呈现   二.页生命周期阶段        ASP.NET编程模型之页面生命周期执行一系列步骤:页面的初始化.实例化控件.还原和维护状态.运行事件处理程序代码.呈现.为了在合适的阶段执行所需的代码,所以要对页面生命

通过DevOps驱动敏捷应用生命周期管理

应用生命周期管理(Application Lifecycle Management,ALM)帮助定义整个软件及系统生命周期,它为一组广泛的任务和利益相关者提供了指南.这些利益相关者在创建可靠和安全的系统方面担任了核心的角色.应用 DevOps 方法来改善沟通和协作来驱动整个应用生命周期.通过本文了解如何使用 DevOps 来理解应用生命周期中每一个利益相关者之间的依赖性. DevOps 通过推广一组务实的原则和实践从根本上转换了开发和运维专业人员一起工作的方式,可以帮助交付可靠.安全和没有缺陷的

《Mavan官方文档》构建生命周期介绍

构建生命周期基础 Maven是以构建生命周期这个核心概念为基础.构建生命周期是指为一个工程进行项目构建和分发的过程. 为了构建一个工程,有必要去学习一系列构建Maven项目的命令,并且POM文件会确保他们能够得到想要的结果. Maven中内置了三个构建生命周期:default,clean和site.default生命周期处理工程的部署,clean生命周期处理工程的清理,而site生命周期则负责创建工程的站点文档. 构建生命周期是由阶段组成的 三个构建生命周期都是由一系列不同的构建阶段组成,每一个

3个数从大到小排序用地址传递和值传递

问题描述 3个数从大到小排序用地址传递和值传递 3个数从大到小排序用地址传递和值传递(指针) 三个数从大到小分别用地址传递和值传递(指针) 解决方案 形参与实参,使用形参就是值传递方式,而实参则是地址传递. 解决方案二: 值传递排序后,他们的值不会改变 解决方案三: 说白了 就是 地址传递来排序就是 内存空间里 定义的这三个数它们不发生变化,用指针就相当于给它们贴标签,谁是第一谁是第二,指针按排序顺序逐个贴上标签.而值传递是,刚开始是乱序的,这三个数字的在内存里面的值要变化,是直接的比较.指针相

javascript值传递和引用传递的问题

问题描述 javascript值传递和引用传递的问题 我看了一篇文章,讲了值传递和引用传递的过程,但是页面最后给出的例子却没有看懂, function setName(obj){ obj.name = "test1"; obj = {}; obj.name = "test2"; } var person = new Object(); setName(person); alert(person.name); 该段代码中方法里进行了 obj={ } ,obj.name