这次以windows phone应用的编程为主,记编写ToDoList应用的过程
纵观整个程序,觉得最核心的部分是写好DataSource,其中有对每个任务的具体定义,如何存储,如何提取,如何删除等核心的函数,把这个部分写好,其他地方都是对这些函数的调用,只要逻辑不出现差错,就能顺利运行。
1.一个叫Ritual的class,代表每个任务,class中分别有Title、Description、DueDate,代表每个任务的不同属性;
2.建一个DataSource类,其中用ObservableCollection<Ritual>存储任务的集合,之所以选择它是因为它有“表示一个动态数据集合,在添加项、移除项或刷新整个列表时,将提供通知”的特点,在对原有任务进行修改,或删除时能够提供便利;
3.DataSource.GetRituals:在DataSource类中写了这样一个函数来从数据源中获取所有的任务下面用一段代码来看一下它具体是怎么实现的:
这段代码的特别之处是从ObservableCollection<Ritual>获取时先判断是否为空,为空时做特殊处理
4. 添加任务:这里涉及到如何将任务保存,甚至说永久保存,即下次运行程序时任务还在,的问题
这次采用的做法是将数据存到.json文件中,具体的实现是:先设一个可将ObservableCollection<Ritual>类型数据序列化的jsonSerializer,和一个与.json文件连接的stream,
用这样一句话,将数据集合通过流写进文件保存下来;读取的时候,方法类似,需要一个将文件内容反序列化的jsonSerializer通过stream,把文件内容按格式读到数据集合里去
5.以上讲到的数据存储的方法在windows phone 和 windows8.1 上都是同样适用的,但不适用与wpf应用,所以在写wpf的时候可以改用.xml
6.说到三个平台实现的问题,在写这个应用的时候,windows phone 和 windows8.1 的代码几乎是相同的,除了改改.xaml,没什么变动,但在wpf中很多属性不受支持,比如说显示任务的列表ListView中的每一项在wpf中似乎是无法点击的,因此不能用点击每一项的方式进入编辑界面,就无法按原来的方式实现编辑和删除,所以在wpf中列表控件改用了DataGrid,修改可以直接在列表中完成,可是删除呢?因此,在列表中增加了checkbox属性,用户可以选择要删除的任务,幸好后台是可以接收到这个改变的,然后对整个任务集合做筛选,删除就完成了
7.上面分别讲到对任务的修改和删除,都是使任务集合发生变动的操作,前面说用ObservableCollection<Ritual>可以在添加项、移除项或刷新整个列表时,将提供通知,可是如果不做额外的功课,直接运行,是会报错的,或者说数据源的改变不能影响到视图层,也就是说还缺那么一步;通过进一步研究发现,要让视图层得知数据源的变化需要一个明确的提醒——为了完全支持将绑定源对象中的数据值传送到绑定目标,在支持可绑定属性的集合中的每个对象都必须实现适当的属性更改通知机制,如 INotifyPropertyChanged 接口,因此,对任务Ritual类实现上述接口,加入如下函数
并且在对数据修改时加入ritual.NotifyPropertyChanged("属性名");即可
以上是回顾此次实验过程觉得比较重要的点,写在这里分享一下。。
----------------END & TO BE CONTINUED----------------------------