设为首页 收藏本站
查看: 1352|回复: 0

Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据

[复制链接]
YunVN网友  发表于 2015-5-23 06:30:33 |阅读模式
第14部分:在运行时绑定到真实的数据
  原文地址:  http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-14-Binding-to-Real-Data-at-Runtime
  系列地址: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.向应用程序添加真实的运行时数据
  这是当前运行的应用程序:
DSC0000.png
  我们没有在运行时加载数据。我们需要完成的是将SoundModel类的每个公共属性,比如说Animals,设置为某个已加载数据的SoundGroup对象的实例。所以,这里是我希望在LoadData()方法中实现互动功能的一个示例:
DSC0001.png
  剩下工作的就是实现CreateAnimalsGroup()辅助方法,如下所示:
DSC0002.png

  • CreateAnimalsGroup将返回一个SoundGroup实例。
  • 我们将创建一个SoundGroup实例并在整个辅助方法中构建它。
  • 我们将设置Title属性,它将作为PivotItem的标题属性被显示。
  • 为避免输入声音文件的完整路径,我们将它保存在一个变量中,并在初始化SoundData的每个新实例时对变量进行追加。
  • 这里我们向SoundGroup的Items属性(类型是List)添加一个新的SoundData实例,并使用对象初始值设定项语法填充每个Title和FilePath属性。
  当运行应用程序时:
DSC0003.png
  我们现在可以在动物PivotItem中看到所有的实际数据。
  但是等一下,动物PivotItem的标题在哪里?等一下我们将修复该问题。现在让我们完成其余Create___Group()方法的添加。
  这里是CreateCartoonsGroup()方法的清单:
DSC0004.png
  这里是CreateTauntsGroup()方法的清单:
DSC0005.png
  这里是CreateWarningsGroup()方法的清单:
DSC0006.png
  现在我们将在LoadData()方法中使用这些辅助方法以填充每个相关的属性:
DSC0007.png
2. 修复PivotItem标题的数据绑定问题
  如果我尝试运行该应用程序,我看不到其它的PivotItem项,因为我们缺少PivotItem标题:
DSC0008.png
  我的第一反应是这是一个绑定问题,数据没有正确加载。我从OnNavigatedTo()事件处理程序开始查找问题。显然,LoadData()在此处被调用:
DSC0009.png
  接着我去查看App.xaml.cs文件。在构造函数中,如果viewModel为null将创建一个新的SoundModel实例:
DSC00010.png
  我怀疑这是一个与时间顺序有关的问题。Pivot控件在App.ViewModel为空时发起了对它的请求,然后DataTemplate在App.ViewModel被填充后发起对它的请求。(译注:这就是为什么看不到Pivot控件的标题而能够看到PivotItem中的数据的原因)
  在盯着它看了片刻之后,我在MainPage.xaml.cs中设置了断点:
DSC00011.png
  调试应用程序显示DataContext在调用LoadData()前就被设置。这意味着PivotItem的标题立即就被绑定,但是PivotItems的ItemTemplates/ DataTemplates仅在我们调用了LoadData()才进行绑定。
DSC00012.png
  这就是我们只见到一部分数据,但是没有见到其它数据的原因。解决这个问题的方法很简单:我们将在创建新的SoundModel实例后立即调用LoadData():
DSC00013.png
  通过在App.xaml.cs中显式地添加对LoadData()的调用,我们再次运行应用程序:
DSC00014.png
  PivotItem的标题重新出现,并且我们可以导航到每个类别并查看已经被加载的数据。
回顾
  综上所述,本课的重点是如何实现真实的数据。虽然我们可以采用不同的方法,我们选择了创建辅助方法,这些辅助方法包含硬编码的C# SoundData和SoundGroup类的实例。我们还看到了如何排查一个奇怪的有关数据绑定的时间顺序问题,调试并理解事件的顺序是一项宝贵的技能。
  请不要忘记我在本课开始时提出的问题。这里我希望您使用不同的数据访问技术重新创建此应用程序,例如用真实数据扩充SampleData.xaml,然后在运行时加载这些数据。有没有想到解决的方法?我敢打赌如果花上一天时间,不需要我的帮助您就能解决问题。通过解决这个问题,您也许会比从本系列其它课程学到的都要多,因为只有通过自己的努力才能真正学到东西。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69648-1-1.html 上篇帖子: 重新想象 Windows 8 Store Apps (4) 下篇帖子: Windows 8 Metro 关于StreamSocket MSDN示例阅读
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表