码迷,mamicode.com
首页 > 其他好文 > 详细

UWP开发:异步方法返回集合的数据绑定问题

时间:2016-07-10 12:27:31      阅读:390      评论:0      收藏:0      [点我收藏+]

标签:

 

——最近在做UWP开发,其中请求API数据的时候,往往是通过异步请求网络,再处理json数据,返回集合对象。通常,我们的做法是将集合数据在ViewModel层进行处理,让ViewModel实现ObservableCollection接口,然后在View层后台实例化ViewModel对象,前台绑定对象。这样就实现了集合的绑定和通知。这里需要注意,集合的绑定,不单单是绑定,而且要实现绑定通知,才算真正的绑定。

为什么这么说呢?看一下在开发中遇到的问题:

由于一个简单的页面,需要绑定一组集合数据,因为这个界面过于简单,我觉得麻烦,就没有“按套路出牌”,即没有通过ViewModel层实现集合通知。而是通过list直接绑定到界面,后台代码如下,其中通过页面的OnNavigationTo方法用集合list接收异步方法返回的集合数据。

技术分享

在前台绑定list。这样按理来说,就完成了集合的绑定。但是,结果是不行的。数据并没有显示在界面上。

技术分享

 

那么,List集合是不能绑定到前台显示的吗?

于是我去问一另一位搞uwp开发大神-Script,结果他做了一个测试,而且显示List集合是可以绑定到界面上的,如下图:

技术分享

在OnNavigationTo方法里模拟获取集合,在构造函数里初始化。结果显示绑定成功了!界面上可以正常显示。

那么问题来了,为什么我的绑定不成功呢?

细心的话,可以看到,我的数据请求用的是异步返回数据的方法。而Script大神一开始测试用的是同步,当Script大神将自己的方法改为异步后:

技术分享

是的,数据绑定失效了。

问题就是出在了异步和同步。那么,为什么同样是list集合,异步方法,绑定会失效,而同步方法的话绑定就可以呢?

其实,还是因为自己没弄清数据绑定的实质,前面说了,数据绑定, 不仅仅是绑定,还要实现数据的变更通知。

同步方法在执行时,会卡在OnNavigationTo方法那里,直到返回数据,才进入界面。当进入界面时,此时,list里面已经有了数据。所以,在前台就可以看到绑定的数据。

异步方法在执行时,会异步加载数据,同时不影响绑定的进行,也就是说,在数据还没有返回的时候,绑定已经完成了,也进入界面了,list此时的值还是null,因为异步方法此时还没有返回数据,而此时,前台就显示的没有内容,当异步方法执行完毕,返回集合数据的时候,由于用的是list集合,而list集合是不具有自动通知前台更新数据的能力。所以,此时,即使list内已经得到了集合数据,但是前台显示的还是空白。明白了吗?

所以,还是乖乖地用ObservableCollection接口比较好!

通过以上的分析,终于明白了问题所在。,对数据绑定,异步加载,等方面的理解也更深了一步。心中的疑惑总算是解决了。好了,时间也不早了,好长时间1点以前没睡过觉了,不过每天能写下自己的学习中的收获,真的很好!如果您也是uwp爱好者,或者有什么疑问,欢迎加入uwp开发交流群:193148992。共同学习交流。

——IT追梦园

UWP开发:异步方法返回集合的数据绑定问题

标签:

原文地址:http://www.cnblogs.com/wpali/p/5657376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!