• 解决WP8应用里ListBox绑定数据变多导致越来越卡


    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条。

  • 相关阅读:
    jni ndk 入门
    Activity 四种启动模式
    广播接收者 BroadcastReceiver
    android 焦点 ListView 点击事件获取失败
    android 动画效果
    JAVA 配置
    python 1:列表和字典
    poj1595 水题
    hdu 1181 深搜
    poj3264 划分树
  • 原文地址:https://www.cnblogs.com/rentianlong/p/3194031.html
Copyright © 2020-2023  润新知