Windows Phone三种共享数据的方式

移动开发
本文为大家介绍了Windows Phone开发中三种共享数据的方式,包括访问公共属性、使用App类、使用PhoneApplicationService对象的State属性,希望对大家有所帮助。

***种方法:访问公共属性

在重写protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)方法时,参数e包含了大量的数据,其中e.Content表示将要导航到的页面,可以直接通过e.Content来访问将要导航到的页面的公共全局变量。如

  1. (e.Content as SecondPage).textBlock1.Text = "ddd"

第二种方法:使用App类

首先要知道,程序中所有页面都可以访问到从Application派生的App类,可以通过往App类添加属性、字段等来作为各个页面都可以访问的共享数据。访问Application类的静态属性Current可以返回当前应用程序的Application对象,Current 属性返回对 Application 对象的引用,而非从 Application 派生的类的实例。如果您需要直接访问后者,则需要将由 Current 返回的值强制转换为从 Application 派生的类的类型,如 (Application.Current as App).Str = "eee"; 其中Str是额外添加到App类的:

  1. public partial class App : Application     {     public string Str { setget; }   } 

第三种方法:使用PhoneApplicationService对象的State属性

PhoneApplicationService对象的State属性 是 IDictionary<string, object>类型的字典接口。

该项目有两个页面:MainPage和SecondPage,各有三个button和三个textblock。代码如下:

  1. View Code 
  2. using System; 
  3. using System.Collections.Generic; 
  4. using System.Linq; 
  5. using System.Net; 
  6. using System.Windows; 
  7. using System.Windows.Controls; 
  8. using System.Windows.Documents; 
  9. using System.Windows.Input; 
  10. using System.Windows.Media; 
  11. using System.Windows.Media.Animation; 
  12. using System.Windows.Shapes; 
  13. using Microsoft.Phone.Controls; 
  14. using Microsoft.Phone.Shell; 
  15. namespace WPApp_Navigation 
  16.      //为类App添加一个公共属性.程序中所有页面都可以访问到从Application派生的App类 
  17.      public partial class App : Application 
  18.      { 
  19.          public string Str { setget; } 
  20.      } 
  21.      public partial class MainPage : PhoneApplicationPage 
  22.      {         
  23.          // 构造函数 
  24.          public MainPage() 
  25.          { 
  26.              InitializeComponent(); 
  27.              this.button1.Click += new RoutedEventHandler(button1_Click);                         
  28.          } 
  29.          void button1_Click(object sender, RoutedEventArgs e) 
  30.          { 
  31.              //赋给Uri的字符串参数中间别留空格,多个参数中间用&连起来 
  32.              this.NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.RelativeOrAbsolute)); 
  33.          } 
  34.          //重写基类的OnNavigateFrom方法,离开此页面时触发 
  35.          protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
  36.          { 
  37.              //参数 e 表示为导航方法提供的数据 
  38.              base.OnNavigatedFrom(e); 
  39.              //***种方法:访问公共属性 
  40. //e.Content 表示正在导航到的目标 
  41.              if (e.Content is SecondPage) 
  42.              { 
  43.                  (e.Content as SecondPage).textBlock1.Text = "ddd"
  44.              } 
  45.              //第二种方法:通过App类中的公共属性 
  46. //Current 属性返回对 Application 对象的引用 
  47.              (Application.Current as App).Str = "eee"
  48.              //第三种方法:使用PhoneApplicationService对象的State属性 
  49.              PhoneApplicationService.Current.State["s6"] = "fff"
  50.          } 
  51.          protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
  52.          { 
  53.              base.OnNavigatedTo(e); 
  54.              this.textBlock2.Text = (Application.Current as App).Str; 
  55.              if (PhoneApplicationService.Current.State.ContainsKey("s6")) 
  56.              { 
  57.                  this.textBlock3.Text = (string)(PhoneApplicationService.Current.State["s6"]); 
  58.              } 
  59.          } 
  60.      } 
  61. }
  1. View Code 
  2. using System; 
  3. using System.Collections.Generic; 
  4. using System.Linq; 
  5. using System.Net; 
  6. using System.Windows; 
  7. using System.Windows.Controls; 
  8. using System.Windows.Documents; 
  9. using System.Windows.Input; 
  10. using System.Windows.Media; 
  11. using System.Windows.Media.Animation; 
  12. using System.Windows.Shapes; 
  13. using Microsoft.Phone.Controls; 
  14. using Microsoft.Phone.Shell; 
  15. namespace WPApp_Navigation 
  16.      public partial class SecondPage : PhoneApplicationPage 
  17.      { 
  18.          public int a = 0; 
  19.          int b = 1; 
  20.          public SecondPage() 
  21.          { 
  22.              InitializeComponent(); 
  23.              this.button1.Click += new RoutedEventHandler(button1_Click);       
  24.          } 
  25.          void button1_Click(object sender, RoutedEventArgs e) 
  26.          { 
  27.              //返回上一个页面 
  28.              this.NavigationService.GoBack(); 
  29.          } 
  30.          //当该页面是活动页面时触发 
  31.          protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
  32.          { 
  33.             base.OnNavigatedTo(e);//调用基类的虚方法是应该的,但不是必须的 
  34.             this.textBlock2.Text = (Application.Current as App).Str; 
  35.             if (PhoneApplicationService.Current.State.ContainsKey("s6")) 
  36.             { 
  37.                 this.textBlock3.Text = (string)PhoneApplicationService.Current.State["s6"]; 
  38.             } 
  39.          } 
  40.          //当该页面不是活动页面时触发 
  41.          protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
  42.          { 
  43.              base.OnNavigatedFrom(e); 
  44.              //离开此页面前,该页面也可以通过三种方式来传递数据给下一个页面 
  45.              if (e.Content is MainPage) 
  46.              { 
  47.                  (e.Content as MainPage).textBlock1.Text = "123"
  48.              } 
  49.              (Application.Current as App).Str = "456"
  50.              PhoneApplicationService.Current.State["s6"] = "789"
  51.          }       
  52.      } 

 

责任编辑:闫佳明 来源: wpcome
相关推荐

2017-07-14 15:07:23

2012-05-28 09:54:09

APP 性能

2015-01-16 17:41:45

数据中心模块化

2012-07-17 09:16:16

SpringSSH

2021-11-05 21:33:28

Redis数据高并发

2014-12-31 17:42:47

LBSAndroid地图

2021-06-24 08:52:19

单点登录代码前端

2019-11-20 18:52:24

物联网智能照明智能恒温器

2020-11-01 17:10:46

异步事件开发前端

2010-03-12 17:52:35

Python输入方式

2018-04-08 09:31:57

大数据

2018-04-02 14:29:18

Java多线程方式

2010-09-13 12:19:03

2009-07-29 09:36:07

无线通信接入方式

2023-08-22 07:05:34

PowerShellWindows

2011-07-25 12:41:38

接入方式布线

2010-08-24 09:43:33

2021-11-26 11:07:14

cowsay命令Linux

2023-12-04 09:31:13

CSS卡片

2022-05-07 10:20:17

truncatedeleteMySQL
点赞
收藏

51CTO技术栈公众号