解决WP8应用里ListBox绑定数据变多导致越来越卡
2013-07-16 19:14
316 查看
ListBox控件绑定数据,当滑动到底部的时候加载数据到列表上,这样就会产生一个问题,当ListBox上面绑定的数据有几千条的时候,界面将会卡顿,我们可以通过在ListBox上只绑定指定数量的数据,其余的都存在内存中,需要的时候再取出。假如ListBox在界面显示部分的上面有几百几千条在界面之上,可以将它存储在一个存储空间中(上入水池),需要的时候再从里面取出。当然下面的也一样。
当对ListBox所绑定的数据源进行Insert或Remove操作的时候,在存储到上入水池或从上入水池取数据的时候,由于当前手机界面所显示的那个商品会往下走或者往上走,所以需要设置ListBox中ScrollViewer的VerticalOffset。这样才能保证界面不跳跃。但是VerticalOffset要设置偏移多少,才能不跳跃呢?经测试发现VerticalOffset的值并不是像素值,而是ListBoxItem的数量,即VerticalOffset=1时,第一个ListBoxItem的底部与在手机显示的界面上端紧贴,第二个控件ListBoxItem在手机界面的顶部显示出来。当ListBox里面有50条数据时,ListBox里的ScrollViewer的ScrollableHeight值就是50,ListBox划到底部的时候VerticalOffset的值就是在手机上部的ListBoxItem的数量,假如界面上有4.3个Item,那么划到底部此时的VerticalOffset的值最大只能是50-4.3=45.7。
代码是在在ScrollViewer的状态改变事件中进行执行,这样比在ValueChanged进行操作要节约很多资源,只在列表停止滚动的时候 即:e.NewState.Name == "NotScrolling" 进行列表数据Remove和Insert操作。
代码:
http://files.cnblogs.com/rentianlong/ListBoxHighEfficencyDemo.rar
只需要修改 lstPreNextMaxCount就可以限制ListBox最大的绑定数量。
我的例子里ListBox最多绑定数量不会超过150条。
当对ListBox所绑定的数据源进行Insert或Remove操作的时候,在存储到上入水池或从上入水池取数据的时候,由于当前手机界面所显示的那个商品会往下走或者往上走,所以需要设置ListBox中ScrollViewer的VerticalOffset。这样才能保证界面不跳跃。但是VerticalOffset要设置偏移多少,才能不跳跃呢?经测试发现VerticalOffset的值并不是像素值,而是ListBoxItem的数量,即VerticalOffset=1时,第一个ListBoxItem的底部与在手机显示的界面上端紧贴,第二个控件ListBoxItem在手机界面的顶部显示出来。当ListBox里面有50条数据时,ListBox里的ScrollViewer的ScrollableHeight值就是50,ListBox划到底部的时候VerticalOffset的值就是在手机上部的ListBoxItem的数量,假如界面上有4.3个Item,那么划到底部此时的VerticalOffset的值最大只能是50-4.3=45.7。
代码是在在ScrollViewer的状态改变事件中进行执行,这样比在ValueChanged进行操作要节约很多资源,只在列表停止滚动的时候 即:e.NewState.Name == "NotScrolling" 进行列表数据Remove和Insert操作。
代码:
http://files.cnblogs.com/rentianlong/ListBoxHighEfficencyDemo.rar
只需要修改 lstPreNextMaxCount就可以限制ListBox最大的绑定数量。
我的例子里ListBox最多绑定数量不会超过150条。
相关文章推荐
- c#(winform)中自定义ListItem类方便ComboBox和ListBox添加项完全解决(DropDownList 和Combox 数据绑定的常用方法)
- c#(winform)中自定义ListItem类方便ComboBox和ListBox添加项完全解决(DropDownList 和Combox 数据绑定的常用方法) .
- android应用第一次启动加载大数据导致启动速度慢解决办法
- 一例knockout with绑定,异步调用数据为null导致的绑定div标签内容不能显示的解决
- 解析WPF绑定层次结构数据的应用详解
- 【黑马程序员】listbox和datagrid数据绑定(学习笔记)
- 使用Nginx解决IIS绑定域名导致应用程序重启的问题
- WP8__实现ListBox横向滑动及子项绑定图片等控件
- 让ListBox的SelectedItems属性支持数据绑定
- 全量导入数据 导致solr内存溢出 崩溃问题解决
- Castor的XML数据绑定应用
- Struts2 + Json _ 配置,异常解决及深入了解Struts2返回JSON数据的原理及具体应用范例
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- WPF TextBox绑定数据的简单应用
- gridview 绑定数据为空时,表头部分内容显示的解决方法
- Android RecyclerView中ViewHolder的复用导致数据错乱解决办法
- 设计模式的实际应用——在C#中解决单客户端窗口数据并发问题(2010-08-04)
- 一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法
- 《ASP.NET》数据绑定—DropDownList、ListBox
- ExtJs4.0在myeclipse里会出现内存不足,导致无法应用的问题解决