windows8开发-初学阶段知识点小结
学了一个多月的win8开发,做着一个项目;其间遇到了许多困难,也收获了不少知识,有些东西是自学得到的,有些则是别人的帮助,例如devdiv论坛就是一个不错的学习助手。下面做一下本阶段的一个简单学习小结吧。
(1)wp7应用移植到metro风格应用。废了不少劲,其中数据库的重写占了大部分时间。可以参考博客:http://blog.csdn.net/moxiaomomo/article/details/8104556
(2)页面间的跳转问题。比较简单,核心是使用支持导航的内容控件Frame。如果涉及到SnapView,FillView,FullView的切换,最好实现一个管理所有页面切换的RootPage;该RootPage内置了Frame控件,并且注册了SizeChanged的监听事件。
(3)使用通知(Toast)和计划通知(ScheduledToast)。支持事件的提醒,可以获取从点击toast到启动应用的这个事件和参数。对于toast的处理和获取,可以放到后台进行,避免当数据量较大时,阻塞UI交互。
(4)异步编程。metro应用中一个很明显的特征是,所提供的API大部分是基于异步运行的(async/await)。该异步机制用起来比较简便和美观,而且提高了UI交互的流畅度。
不过有个问题,有时我们只是想要一个同步的操作,API偏偏没有支持同步的接口;可以将异步伪造成同步(事实上await就是相当于创建了类似同步的效果?),不过写起来始终有点不舒服。
(5)自定义各种各样的UserControl。进行这个过程,有时不亦乐乎,有时又极其的厌烦。因为有时你会觉得可以自由发挥,不受系统限制;但是有时候又觉得千篇一律,重重复复,而且一个ListBox的Style改写起来都需要n行代码(xaml)。
有些东西还是需要注意一下,尽量少用依赖属性(Dependency Property),因为很耗性能;有需要就自定义EventHandler,将监听操作和处理的逻辑写到控件的外部。
(6)可监测的数据源。如果要实现DataBinding,并且当数据源更新时,相应的控件也对应更新,一般做好两点: a.数据源类继承自接口INotifyPropertyChanged; b.使用ObservableCollection<data> 代替 List<data>。
(7)关于后台线程。可以使用ThreadPool.RunAsync()方法,也可以使用Task.Run()方法等,不过官方建议尽量使用Task,因为对于线程的管理(例如CancelRun操作)提供了更加安全易用的接口。
具体使用可参考一下博客:http://blog.csdn.net/moxiaomomo/article/details/8236633或 http://blog.csdn.net/moxiaomomo/article/details/8312902
(8)其他还有挺多的细节,就不描述了。林林总总,要做好一个客户端应用,细节永远都很重要。有些东西可能只是会用,但是却没有机会去一窥它的内涵机制,那是多少都有点遗憾。继续学习吧,学到的还只是冰山一角,剩下的路还很长哩。