Windows Phone 8 實現列表觸底加載


【背景】

很多時候在做WP開發的過程中會遇到數據需要分頁獲取,根據微軟官方的推薦方式,建議實現為Market中類似的體驗,即滑動到列表的底部的時候加載更多的數據。

這一需求在早起WP7.1時代實現起來是很費勁的,需要借助WP Toolkit 中的LongListSelector,而自從LLS被微軟扶正之后這一需求的實現有了更官方的方法。

【實現思路】

LLS傳承了Listbox UI虛擬化的特性,所謂UI虛擬化即列表數據源中的數據不會一次性根據ItemTemplete將所有數據UI化,而是隨着列表的滑動,隨時將數據UI化,或者將UI化的數據釋放掉。舉例說明下更直觀:

   

比如,LLS數據源中有1W條User類型的數據,記錄用戶信息。LLS負責展示這1W條數據。假設一屏能顯示10條。那么UI虛擬化的工作就是:

1、將30條(舉例的數據)User根據ItemTemplete繪制出對應的30個UI控件

2、向下滑動看到第20條數據的時候,從數據源中拿出20條繪制UI控件,並將前20條的繪制出來的控件釋放掉。

3、向下滑動看到第40條數據的時候,再從數據源中拿出20條繪制UI控件,並將前20條繪制出來的控件釋放掉。

4、往上滑動重新回到第20條數據的時候,反向再進行一次繪制和釋放

   

以上UI虛擬化的概念了解后我們標題中的需求就很好實現了。

LLS定義了OnItemRealized事件,其作用簡單說:當LLS根據ItemTemplete繪制UI控件時會觸發此事件,通知用戶當前繪制的是哪一個數據。

   

【具體代碼分析】

根據這個定義我們實現的代碼如下:

   

   

   

解釋:

1、Offset 為距離數據源中最后一項的偏移量

2、IsLoading為依賴屬性,標識當前正在加載數據

3、當OnItemRealized事件觸發時,判斷當前Realized的Item是否為數據源的倒數第二項,如果是,則認為需要加載新的數據,觸發DataRequest事件

   

如此一個簡單通用的"無盡列表"便實現了。

參考:

http://msdn.microsoft.com/library/windowsphone/develop/microsoft.phone.controls.longlistselector.itemrealized(v=vs.105).aspx

http://code.msdn.microsoft.com/wpapps/TwitterSearch-Windows-b7fc4e5e

完整代碼見:

https://gist.github.com/tianhonghui/6999984

 

關於WP的交流歡迎加入QQ群:182659848

   


免責聲明!

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



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