window phone list box使用收藏,mvvm ItemsControl数据绑定
具体case是,最近做的window phone7项目在异步加载数据并用itemsControl展示时,ItemsControl模板渲染慢,渲染事件几乎是异步加载数据事件的3倍;为了解决这个问题尝试多种方法但最终依旧不明显;无意间看到了下面的几篇文章,获益匪浅,很轻松的解决了这个问题;欣喜之至便将其收藏和大家分享;
作者最后推荐使用LazyListBox,一种在滑动时使用简单模板,在停止滑动时再换为正常(即复杂UI)的模板,具体的可以参考 http://blogs.msdn.com/b/ptorr/archive/2010/10/12/procrastination-ftw-lazylistbox-should-improve-your-scrolling-performance-and-responsiveness.aspx
首先我们的项目用的是MVVM框架,绑定到UI Itemscontrol的是一个ObversableCollection<T>对象,然后UI给ItemsControl设置ItemTemplate,ViewModel里通过异步加载数据并添加到ObversableCollection中,因为ObversableCollection实现了接口INotifyPropertyChanged接口,所以向ObversableCollection里添加或删除Item都会由UI自动更新列表中的项,但是问题是当循环向ObversableCollection中添加数据时,UI渲染就变得非常缓慢;开始本人也以为是没添加一项就会更新UI,可是实际结果却是基本等到所有想都添加完了以后UI才会渲染显示,这就是问题根本所在,加入我又50条或更多数据,页面基本卡了;然后看了这篇文章List Scroll with Items as Image/Description from web - Bing Image Search Experiment作者详细介绍了具体原因并提供了解决办法,哇困扰的问题终于解决了,收藏在这里了。
Windows Phone 7 lists scroll smoothly and consistently
List Scroll with Items as Image/Description from web - Bing Image Search Experiment
一个window phone7开发者必看的blog: http://blogs.msdn.com/b/slmperf/