日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据

發布時間:2025/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天跟大家分享的是大麥UWP客戶端,在分類、訂單或是搜索時都用到的一個小技巧,技術粗糙大神勿噴。

以大麥分類舉例,默認打開的時候,會為用戶展示20條數據,當用戶滾動鼠標或者使用手勢將列表滑動到倒數第二行的位置時,自動加載后續20條數據。提高啟動速度的同時稍稍節省用戶的流量。

其他的就不說了,直接進入代碼階段。

Step1,界面部分很簡單,我放棄了Gridvew自己的滾動,在外面包上了一個ScrollViewr,監聽ViewChanged事件(這樣代碼比較簡單,直接用GridView內部的數據變化那種方式,必須給GridView一個高度等等,麻煩)

<ScrollViewer x:Name="scrollRoot" VerticalScrollBarVisibility="Hidden" ViewChanged="scrollRoot_ViewChanged" Margin="10,0">
<GridView>
……
</GridView>
</ScrollViewer/>

Step2,修改綁定界面的ViewModel,增加一個同樣結構的列表屬性,但是要使用ObservableCollection,利用這個集合的可變性以及自動通知界面,方便的動態通知列表,有數據更新。

using System.Collections.Generic; using System.Collections.ObjectModel;namespace Damai.Windows10.App {/// <summary>/// 搜索頁面ViewModel/// </summary>public class SearchViewModel{private List<SearchResultModel> _l;/// <summary>/// 項目列表/// </summary>public List<SearchResultModel> l{get{return _l;}set{_l = value;if (_l == null) return;if (list == null) list = new ObservableCollection<SearchResultModel>();foreach (var item in _l){list.Add(item);}}}/// <summary>/// 用于數據綁定列表/// </summary>public ObservableCollection<SearchResultModel> list { get; set; }} }

Step3,接下來該怎么初始化,怎么查詢第一波數據(當然了,這個需要咱們服務器端的同學支持,如果他接口不允許分頁查詢,咱們做客戶端的也沒轍 ),初始化數據以后,在當前頁面保存住這個ViewModel,并把它綁定到GridView控件上。

// 加載數據private async Task<bool> LoadData(){try{
          // 你自己的業務邏輯
// 獲取數據并展示 _searchViewModel = new SearchViewModel();_searchViewModel = await HttpConnectionTool.GetDataEntity<SearchViewModel>(TempDataInfo.MakeApiURL(url));if (_searchViewModel == null || _searchViewModel.l == null || _searchViewModel?.l?.Count <= 0){// 異常數據處理} // 綁定數據(一定綁定是那個ObservableCollection屬性的列表)gridViewProject.ItemsSource = _searchViewModel.list;// 加載完成后,觸發事件 return true;}catch (Exception ex){ return false;}}

Step4,處理鼠標滾動事件

// 滾動至底部動態加載數據private async void scrollRoot_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e){if (scrollRoot.VerticalOffset == _originHeight) return;_originHeight = scrollRoot.VerticalOffset;if (_isLoding) return;if (scrollRoot.VerticalOffset <= scrollRoot.ScrollableHeight - 500) return;if (_currentPage >= _countPage + 1) return;_isLoding = true;await Task.Factory.StartNew(async () =>{//調用UI線程添加數據await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>{// 拼接業務查詢URL// 查詢新數據
            SearchViewModel tempViewModel
= await HttpConnectionTool.GetDataEntity<SearchViewModel>(TempDataInfo.MakeApiURL(url));if (tempViewModel != null && tempViewModel.l != null) _searchViewModel.l = tempViewModel.l;_isLoding = false;});});}

好了,搞定打完收工!

?

轉載于:https://www.cnblogs.com/Damai-Pang/p/5209093.html

總結

以上是生活随笔為你收集整理的分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。