windows phone三种共享数据的方式

简介:

上篇文章简述了如果通过在uri后面添加参数来达到传递参数的目的,有时候不仅仅是需要传递数据,而是共享数据,又该如何?下面简述Windows Phone共享数据的三种方法。

  第一种方法:访问公共属性

  在重写protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)方法时,参数 e 包含了大量的数据,其中e.Content表示将要导航到的页面,可以直接通过e.Content来访问将要导航到的页面的公共全局变量。如 (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类的: public partial class App : Application { public string Str { set; get; } }

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

  PhoneApplicationService对象的State属性 是 IDictionary类型的字典接口

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


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

using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using Microsoft.Phone.Controls;
13 using Microsoft.Phone.Shell;
14 
15 namespace WPApp_Navigation
16 {
17     public partial class SecondPage : PhoneApplicationPage
18     {
19         public int a = 0;
20         int b = 1;
21         public SecondPage()
22         {
23             InitializeComponent();
24             this.button1.Click += new RoutedEventHandler(button1_Click);       
25         }
26 
27         void button1_Click(object sender, RoutedEventArgs e)
28         {
29             //返回上一个页面
30             this.NavigationService.GoBack();
31         }
32 
33         //当该页面是活动页面时触发
34         protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
35         {
36            base.OnNavigatedTo(e);//调用基类的虚方法是应该的,但不是必须的
37 
38            this.textBlock2.Text = (Application.Current as App).Str;
39 
40            if (PhoneApplicationService.Current.State.ContainsKey("s6"))
41            {
42                this.textBlock3.Text = (string)PhoneApplicationService.Current.State["s6"];
43            }
44             
45         }
46 
47         //当该页面不是活动页面时触发
48         protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
49         {
50             base.OnNavigatedFrom(e);
51 
52             //离开此页面前,该页面也可以通过三种方式来传递数据给下一个页面
53             if (e.Content is MainPage)
54             {
55                 (e.Content as MainPage).textBlock1.Text = "123";
56             }
57 
58             (Application.Current as App).Str = "456";
59 
60             PhoneApplicationService.Current.State["s6"] = "789";
61         }      
62     }
63 }








本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/811888,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
存储 缓存 安全
硬盘数据恢复:恢复硬盘数据的9个实用方法(Windows版)
无论是工作文档、家庭照片,还是其他珍贵的数字资产,数据丢失总是一件让人头疼的事情。然而,当硬盘发生问题时,不必过于慌张——只要正确应对,许多数据都可以被成功恢复。本文将从常见数据丢失原因到具体恢复方法,为您提供全面的硬盘数据恢复指导。
|
3月前
|
数据库 数据安全/隐私保护 Windows
Windows远程桌面出现CredSSP加密数据修正问题解决方案
【10月更文挑战第30天】本文介绍了两种解决Windows系统凭据分配问题的方法。方案一是通过组策略编辑器(gpedit.msc)启用“加密数据库修正”并将其保护级别设为“易受攻击”。方案二是通过注册表编辑器(regedit)在指定路径下创建或修改名为“AllowEncryptionOracle”的DWORD值,并将其数值设为2。
2060 3
|
6月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
557 1
|
6月前
|
Linux 数据安全/隐私保护 Windows
Linux共享Windows目录
Linux共享Windows目录
|
6月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
166 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
6月前
|
Web App开发 存储 安全
微软警告数百万Windows用户:切勿冒险丢失所有数据
微软警告数百万Windows用户:切勿冒险丢失所有数据
微软警告数百万Windows用户:切勿冒险丢失所有数据
|
6月前
|
编解码 开发工具 C#
Windows电脑如何启动RTSP服务实现本地摄像头数据共享
本文介绍如何利用大牛直播SDK中的轻量级RTSP服务,在Windows平台上轻松采集摄像头数据并生成本地RTSP流。通过SDK提供的SmartPublisherDemo工具,用户能简便地选择摄像头、配置分辨率与帧率,并启动RTSP服务。此外,还支持音频采集、多端口服务以及动态水印等功能。生成的RTSP URL可用于其他终端拉流播放,无需额外部署服务器。该服务适配多种应用场景,如安防监控、电子教室等,并兼容Windows 7及以上版本。对于希望集成此功能的开发者,SDK提供了C++及C#接口,并支持多种编译模式。
244 0
|
9月前
|
Windows
如何使用Windows Media Player刻录数据DVD
Windows Media Player是微软Windows系统自带的多媒体播放器,支持多种音频、视频格式及图片查看,也能接收网络广播和刻录CD/DVD。用户可利用它管理媒体文件、创建播放列表。然而,其刻录DVD功能有限,仅适用于数据DVD。若需创建可在DVD播放机上播放的视频DVD,建议使用专业软件如DVDFab DVD Creator。
|
9月前
|
数据库 Windows
第五十章 使用 ^SystemPerformance 监视性能 - Microsoft Windows 平台的 InterSystems IRIS 性能数据报告
第五十章 使用 ^SystemPerformance 监视性能 - Microsoft Windows 平台的 InterSystems IRIS 性能数据报告
66 0
|
9月前
|
存储 Kubernetes 安全
虚拟机测试Windows Server 2016原地升级2019,应用和数据完美保留
Windows Server 2016可以无缝升级到2019版本,确保应用程序和数据在原地升级过程中完整保留。
493 0