解決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條。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM