Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据
原文 Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据
第14部分:在运行时绑定到真实的数据
系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners
源代码: http://aka.ms/absbeginnerdevwp8
PDF版本: http://aka.ms/absbeginnerdevwp8pdf
我们的SoundBoard应用程序进展如何?
我们已经有了一个新的数据模型,并且在上一课中我们添加了示例数据,我们在设计时使用它们以帮助我们正确对应用程序的用户界面进行布局,特别是我们使用了绑定到SoundData类实例的数据模板。
在本课中我们将注意力转移到在运行时绑定到真实的数据。
说实话,我们可以在应用程序的运行时使用相同的XAML文件作为“实时数据”。如果您想这样实现,您当然可以,并且您已经有了一个良好的开端。您可以用更多SoundGroup和SoundData的实例构建该XAML文件,然后在运行时通过SoundModel类的LoadData()方法加载该文件。
事实上这可能是一个很好的挑战自己的方式。当您完成本系列课程后,您可以回过头重新创建这个应用程序,但是请在此处使用不同的数据访问方法。努力才能学到东西,这样的练习会迫使您努力找到在运行时加载XAML数据到数据模型的方法。
言归正传,本课的计划:
- 在 SoundModel.cs文件中,我们将创建一系列辅助方法,每个辅助方法被设计用于创建SoundData类的实例,这些实例将被添加到SoundGroup中的Items集合。
- 在创建完成所有的辅助方法后,我们将修改LoadData()方法,并对每个辅助方法进行调用。所以,当我们调用LoadData()时,真实的数据将会在运行时出现。
1.向应用程序添加真实的运行时数据
这是当前运行的应用程序:

我们没有在运行时加载数据。我们需要完成的是将SoundModel类的每个公共属性,比如说Animals,设置为某个已加载数据的SoundGroup对象的实例。所以,这里是我希望在LoadData()方法中实现互动功能的一个示例:

剩下工作的就是实现CreateAnimalsGroup()辅助方法,如下所示:

- CreateAnimalsGroup将返回一个SoundGroup实例。
- 我们将创建一个SoundGroup实例并在整个辅助方法中构建它。
- 我们将设置Title属性,它将作为PivotItem的标题属性被显示。
- 为避免输入声音文件的完整路径,我们将它保存在一个变量中,并在初始化SoundData的每个新实例时对变量进行追加。
- 这里我们向SoundGroup的Items属性(类型是List<SoundData>)添加一个新的SoundData实例,并使用对象初始值设定项语法填充每个Title和FilePath属性。
当运行应用程序时:

我们现在可以在动物PivotItem中看到所有的实际数据。
但是等一下,动物PivotItem的标题在哪里?等一下我们将修复该问题。现在让我们完成其余Create___Group()方法的添加。
这里是CreateCartoonsGroup()方法的清单:

这里是CreateTauntsGroup()方法的清单:

这里是CreateWarningsGroup()方法的清单:

现在我们将在LoadData()方法中使用这些辅助方法以填充每个相关的属性:

2. 修复PivotItem标题的数据绑定问题
如果我尝试运行该应用程序,我看不到其它的PivotItem项,因为我们缺少PivotItem标题:

我的第一反应是这是一个绑定问题,数据没有正确加载。我从OnNavigatedTo()事件处理程序开始查找问题。显然,LoadData()在此处被调用:

接着我去查看App.xaml.cs文件。在构造函数中,如果viewModel为null将创建一个新的SoundModel实例:

我怀疑这是一个与时间顺序有关的问题。Pivot控件在App.ViewModel为空时发起了对它的请求,然后DataTemplate在App.ViewModel被填充后发起对它的请求。(译注:这就是为什么看不到Pivot控件的标题而能够看到PivotItem中的数据的原因)
在盯着它看了片刻之后,我在MainPage.xaml.cs中设置了断点:

调试应用程序显示DataContext在调用LoadData()前就被设置。这意味着PivotItem的标题立即就被绑定,但是PivotItems的ItemTemplates/ DataTemplates仅在我们调用了LoadData()后才进行绑定。

这就是我们只见到一部分数据,但是没有见到其它数据的原因。解决这个问题的方法很简单:我们将在创建新的SoundModel实例后立即调用LoadData():

通过在App.xaml.cs中显式地添加对LoadData()的调用,我们再次运行应用程序:

PivotItem的标题重新出现,并且我们可以导航到每个类别并查看已经被加载的数据。
回顾
综上所述,本课的重点是如何实现真实的数据。虽然我们可以采用不同的方法,我们选择了创建辅助方法,这些辅助方法包含硬编码的C# SoundData和SoundGroup类的实例。我们还看到了如何排查一个奇怪的有关数据绑定的时间顺序问题,调试并理解事件的顺序是一项宝贵的技能。
请不要忘记我在本课开始时提出的问题。这里我希望您使用不同的数据访问技术重新创建此应用程序,例如用真实数据扩充SampleData.xaml,然后在运行时加载这些数据。有没有想到解决的方法?我敢打赌如果花上一天时间,不需要我的帮助您就能解决问题。通过解决这个问题,您也许会比从本系列其它课程学到的都要多,因为只有通过自己的努力才能真正学到东西。
Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据的更多相关文章
- Windows Phone 8初学者开发—第4部分:XAML简介
原文 Windows Phone 8初学者开发—第4部分:XAML简介 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Developme ...
- Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式
原文 Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式 第13部分:设置LongListSelector中磁贴的样式 原文地址: http://c ...
- Windows Phone 8初学者开发—第12部分:改进视图模型和示例数据
原文 Windows Phone 8初学者开发—第12部分:改进视图模型和示例数据 第12部分:改进视图模型和示例数据 原文地址:http://channel9.msdn.com/Series/Win ...
- Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序
原文 Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8- ...
- Windows Phone 8初学者开发—第10部分:数据绑定应用程序和透视应用程序项目模板简介
原文 Windows Phone 8初学者开发—第10部分:数据绑定应用程序和透视应用程序项目模板简介 原文地址: http://channel9.msdn.com/Series/Windows-Ph ...
- Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述
原文 Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述 第9部分:Windows Phone 8模拟器概述 原文地址: http://channel9.ms ...
- Windows Phone 8初学者开发—第8部分:理解编译和部署
原文 Windows Phone 8初学者开发—第8部分:理解编译和部署 第8部分:理解编译和部署 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...
- Windows Phone 8初学者开发—第7部分:本地化应用程序
原文 Windows Phone 8初学者开发—第7部分:本地化应用程序 第7部分:本地化应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...
- Windows Phone 8初学者开发—第6部分:设置应用程序的样式
原文 Windows Phone 8初学者开发—第6部分:设置应用程序的样式 Source Code: http://aka.ms/absbeginnerdevwp8 PDF Version: ht ...
随机推荐
- jQuery中on()方法用法实例详解
这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...
- 12.04 如何更专业的使用Chrome开发者工具
顾名思义Chrome开发工具就是一个工具,它允许Web开发人员可以通过浏览器应用程序干预和操作Web页面,也可以通过这个工具调试和测试Web页面或Web应用程序.有了这个工具,你可以做很多有趣的事情: ...
- C++学习笔记6
泛型算法 1. 算法怎样工作 每一个泛型算法的实现都独立于单独的容器.这些算法还是大而不全的,而且不依赖于容器存储的元素类型.为了知道算法怎样工作,让我们深入了解find 操作.该操作的任务是在一个未 ...
- Android 自己主动化測试之------ Monkey工具
尽管 一般公司都有专门的測试人员,可是有时候 免不了 我们既要去开发产品,也要去測试产品,測试产品.有些机械化的 点界面的操作,谷歌已经给我们提供了工具.Monkey, 猴子測试. 什么是Monkey ...
- 为客户打造RAC-DG一些遇到的问题汇总
昨日有建立一个客户RAC-DG物理备用数据库,这里的一般过程中再次列举一下,为了不涉及泄露隐私.的主要参数已被替换名称.详细路径也不一致.因为环境的客户端不与本机连接的网络同意,当故障不能削减各种报警 ...
- pcre函数具体解释
PCRE是一个NFA正则引擎,不然不能提供全然与Perl一致的正则语法功能.但它同一时候也实现了DFA,仅仅是满足数学意义上的正则. PCRE提供了19个接口函数,为了简介,使用PCRE内带的測试程序 ...
- Windows 10 安装
下载了 Windows 10 的 ISO 文件:WindowsTechnicalPreview-x64-ZH-CN.iso,在 VMWare 10 上进行了安装. 安装时没有 Windows 10 ...
- js 时间戳转换成时间格式,可自定义格式
由于 c# 通过ajax获取的时间 传到前台 格式为:/Date(1354116249000)/ 所以需要转换一下,想要什么格式 更改 format() 里的 返回语句 就可以了 formatDate ...
- zoom和transform:scale()的区别
zoom和transform:scale()都可以用于缩放,目前移动端存在各种各样不同屏幕大小的手机,为了兼容不同宽度的屏幕,我们可以基于某一屏幕宽度大小(比如iPhone5的320,这个根据设计稿来 ...
- 解决 Tomcat reload WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but fail
转自:http://www.cnblogs.com/interdrp/p/5632529.html 我的错误如下: 06-Sep-2016 18:57:10.595 WARNING [localhos ...