windows phone 三种数据共享的方式(8)
本节实现的内容是数据共享,实现的效果描述:首先是建立两个页面,当页面MainPage通过事件导航到页面SecondPage是,我们需要将MainPage中的一些内容(比如一个字符串)传递到SecondPage中,SecondPage页面就出呈现出传递来的内容,当页面SecondPage通过事件导航到页面MainPage的时候,我们也把一些内容(比如一个字符串)传递与页面MainPage;
在建立的MainPage.xaml文件中我只添加了一个Button元素,设置显示的Content内容,并定义了该元素的触摸事件:
<Button x:Name="btn" Content="导航到第二个页面" Grid.Row="" Click="btn_Click"></Button>
MainPage的隐藏文件首先需要引用如下命名空间
//引用命名空间--PhoneApplicationService类用到using Microsoft.Phone.Shell;
MainPage的隐藏文件的全部代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
//引用命名空间--PhoneApplicationService类用到
using Microsoft.Phone.Shell;
namespace ShareData
{
public partial class MainPage : PhoneApplicationPage
{
// 构造函数
public MainPage()
{
InitializeComponent();
}
/// <summary>
/// 点击导航到第二个页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.Navigate(new Uri("/SecondPage.xaml",UriKind.Relative));
}
//知识点①
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
//目标页--知识点②
if (e.Content is SecondPage)
{
((SecondPage)e.Content).ApplicationTitle.Text = "传递数据成功!";
}
//获得application对象的引用--知识点③
(Application.Current as App).shareData = "通过APP类的属性共享数据";
//应用程序的状态管理---知识点④
PhoneApplicationService.Current.State["Share"] = "临时数据";
base.OnNavigatedFrom(e);
}
///// <summary>
///// 接受传递的值
///// </summary>
///// <param name="e"></param>
//protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
//{
// //获得App类中的共享数据
// PageTitle.Text = (Application.Current as App).shareData.ToString();
// if (PhoneApplicationService.Current.State.ContainsKey("Share"))
// {
// //获得phoneapplicationService对象中设置state属性
// PageTitle.Text += "\n" + PhoneApplicationService.Current.State["Share"].ToString();
// }
// base.OnNavigatedTo(e);
//}
}
}
在建立的SecondPage.xaml文件中我只添加了一个Button元素,设置显示的Content内容,并定义了该元素的触摸事件:
<Button x:Name="btn" Content="导航到第1个页面" Grid.Row="" Click="btn_Click"></Button>
SecondPage的隐藏文件也需要引用相同的命名空间:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
//引用命名空间--PhoneApplicationService类用到
using Microsoft.Phone.Shell;
namespace ShareData
{
public partial class SecondPage : PhoneApplicationPage
{
public SecondPage()
{
InitializeComponent();
}
/// <summary>
/// 接受传递的值
/// </summary>
/// <param name="e"></param>
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
//获得App类中的共享数据
PageTitle.Text = (Application.Current as App).shareData.ToString();
if (PhoneApplicationService.Current.State.ContainsKey("Share"))
{
//获得phoneapplicationService对象中设置state属性
PageTitle.Text += "\n" + PhoneApplicationService.Current.State["Share"].ToString();
}
base.OnNavigatedTo(e);
}
/// <summary>
/// 导航到第一个页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.GoBack(); ;
}
//protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
//{
// if (e.Content is SecondPage)
// {
// ((SecondPage)e.Content).PageTitle.Text = "传递数据成功!";
// }
// (Application.Current as App).shareData = "通过APP类的属性共享数据";
// PhoneApplicationService.Current.State["Share"] = "临时数据";
// base.OnNavigatedFrom(e);
//}
我们三种传递参数的中的一种是利用App类下设置属性进行多个页面共享,直接在App类中设置的公共属性:
//设置共享的数据 public string shareData { get; set; }
至此全部代码已经呈现在这里,那我们是怎么进行数据共享的那,ok,详情如下:首先我们点击MainPage中的button事件,因为没有其他需要执行,此是件执行完毕后会立即执行MainPage页面中的OnNavigatedFrom方法,我们可以看到OnNavigatedFrom的参数是System.Windows.Navigation.NavigationEventArgs就是我们导航是的参数,OnNavigatedFrom方法执行完毕后就会导航到SecondPage页,SecondPage的隐藏文件首先加载的就是构造函数,然后就是OnNavigatedTo方法,所以我们在
通过App类来进行共享参数是因为在程序中所有的页面都可以访问Application派生的App类,在App类中设置的属性当然我们也可以访问,其中Application类的静态属性Current返回的是Application对象的引用,如果想转换为派生的App类,强制转换即可
PhoneApplicationService类的实例化在App.xaml文件中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
x:Class="ShareData.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">
<!--应用程序资源-->
<Application.Resources>
</Application.Resources>
<Application.ApplicationLifetimeObjects>
<!--处理应用程序的生存期事件所需的对象-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing"
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>
</Application>
页面最后加载的方法:OnNavigatedFrom方法;获取导航目标页:e.Content 并进行强制转换;访问App类的公共属性;PhoneApplicationService.State进行暂时的保存及读取;
windows phone 三种数据共享的方式(8)的更多相关文章
- mutex,thread(c++11 windows linux三种方式)
一 c++11 windows linux三种方式 //#include <stdio.h> //#include <stdlib.h> //#include <uni ...
- VMware的三种网络连接方式区别
关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...
- [转]详述DHCP服务器的三种IP分配方式
DHCP就是动态主机配置协议(Dynamic Host Configuration Protocol),它的目的就是为了减轻TCP/IP网络的规划.管理和维护的负担,解决IP地址空间缺乏问题.这种网络 ...
- .NET中的三种接口实现方式
摘自:http://www.cnblogs.com/zhangronghua/archive/2009/11/25/1610713.html 一般来说.NET提供了三种不同的接口实现方式,分别为隐式接 ...
- Apache Spark探秘:三种分布式部署方式比较
转自:链接地址: http://dongxicheng.org/framework-on-yarn/apache-spark-comparing-three-deploying-ways/ 目 ...
- Binding 中 Elementname,Source,RelativeSource 三种绑定的方式
在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到过的问题做下汇总记录和理解. 1. so ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十二 || 三种跨域方式比较,DTOs(数据传输对象)初探
更新反馈 1.博友@落幕残情童鞋说到了,Nginx反向代理实现跨域,因为我目前还没有使用到,给忽略了,这次记录下,为下次补充.此坑已填 2.提示:跨域的姊妹篇——<三十三║ ⅖ 种方法实现完美跨 ...
- Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress(转发)
原文 http://cloud.51cto.com/art/201804/570386.htm Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近 ...
- 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程
一.依赖注入DI 学习目标1)搞清楚构造参数依赖注入的过程及类2)搞清楚注解方式的属性依赖注入在哪里完成的.学习思路1)思考我们手写时是如何做的2)读 spring 源码对比看它的实现3)Spring ...
随机推荐
- hdu1869 六度分离(Floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 转载请注明出处:http://blog.csdn.net/u012860063?viewmode ...
- Lucene.Net 2.3.1开发介绍 —— 三、索引(一)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(一) 在说索引之前,先说说索引是什么?为什么要索引?怎么索引? 先想想看,假如现在有一个文本,我们会怎么去搜索.比如,有一个string ...
- 用ATL开发和部署ActiveX网页控件
用ATL开发和部署ActiveX网页控件 摘 要 ActiveX插件技术广泛的运用于B/S系统中,本文通过一个项目实例,详细介绍用ATL开发和部署ActiveX网页控件的过程.学习使用ActiveX让 ...
- iOS 5 故事板入门(3)
原文: http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-2 Segues 介绍 是时候在我们的故事板中加入更 ...
- 使用Understand获取某个函数(方法)的静态度量指标
在之前的一篇日志中,我简单总结了调用Understand的Perl API的方法,这里再简单总结一些经验: 在SciTools\doc\manuals\pdf目录下的understand_api.pd ...
- Swift编程语言学习9—— 存储属性和计算属性
属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性能够用于类.结构体和枚举里,存储属性仅仅能用于类和结构体. 存储属性和计算属性通经 ...
- [破解]java打包Exe工具 - Jar2Exe Wizard
打包java文件为exe的方法和软件有很多,还有一些开源的软件和一些免费的软件. 我用过的所有打包exe软件中,Jar2Exe Wizard是最好用的,但是只有一个月的试用期,需要的可以从官网下载. ...
- Jedi项目,还真得好好看看,有许多控件和新封装的API(Delphi里面没有)
以前没有重视 http://www.delphi-jedi.org/ https://github.com/project-jedi https://sourceforge.net/projects/ ...
- maven的命令使用笔记
(1)创建web项目mvn archetype:create -DgroupId=com.mycompany.webapp -DartifactId=myweb -DarchetypeArtif ...
- (三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 一.GET和POST的对比: 在漫长的时间当中,其他的方法逐渐的退出了历史舞台,最常用的只剩下GE ...