今天跟大家分享的是大麦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 滚动底部自动加载后续数据相关推荐

  1. Android GridView横向滚动,分页加载数据

    转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/51007348 始终觉得讲ui效果要先放上效果图,要不让其他人好不容易看完了, ...

  2. metronic 4.5.7开发环境下, 在Windows 10上安装了10.16.0版本的node js之后,导致node sass无法加载...

    解决办法: 修改metronic 中的package.json文件, 将gulp-sass的依赖项版本改为3.2.1即可解决 {"name": "metronic&quo ...

  3. 分享一个没有bug的我修改改良过的Fragment懒加载代码

    很多时候 一个fragment可能放在不同地方,但是子类是做了某些刷新的封装,到第哪些需要懒加载哪些 不需要,或者需要但是 所嵌套的层次不同,都会出现不一样的毛病 比如子fragment,放在view ...

  4. centos6.5原生系统修改ceph-mon 的ELF来让其加载低版本glibc库函数

    文章目录 Step 1:glibc-2.17 被libc.so.6库依赖,升级glibc库 Step2:升级编译器-->4.8.2可以正常编译glibc2.17 Step3:修改ELF,降低ce ...

  5. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  6. 【好程序员笔记分享】——下拉刷新和上拉加载更多

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和 ...

  7. 【嵌入式Linux开发一路清障-连载03】Ubuntu22.04使用Mount加载硬盘或NAS等硬盘

    Ubuntu22.04使用Mount加载硬盘或NAS等硬盘 障碍06-学习资料存储在NAS中,如何方便的访问NAS或其它硬盘中的资料呢? 摸索访问共享文件夹 利用文件系统中尝访问局域网中的共享文件夹( ...

  8. 从零开始搭建一个GIS开发小框架(七)——GMap.Net组件WPF版本加载POI性能测试

    目录 1.概述 2.工作内容和步骤: 3.测试结果 4.视频演示 5.总结 6.结束和致谢 1.概述 GIS项目中除了多边形那一套功能,另一个应用最广泛的场景就是POI数据的分析挖掘.今天就给大家演示 ...

  9. chrome84版本解决加载flash插件问题

    项目场景: 页面上有很多页面加载需要flash支持,但是谷歌浏览器本身不支持页面自动允许加载flash插件. 这就让我们的用户在体验系统时,感觉操作十分繁琐 问题描述: 谷歌浏览器不能自动加载flas ...

最新文章

  1. python 股票指标库talib_股票指标库 TA-Lib 安装方法
  2. win32下进程间通信方式之管道、邮件槽、剪切板、共享内存、消息、套接字、RPC、DDE等
  3. 批处理启动和关闭VMware
  4. performance 查看页面性能
  5. 这座中国小城,靠“造假”称霸一个全球市场
  6. 支付宝回应老年版相互宝质疑:5万、10万互助金额度是合理区间
  7. 大数据分析与云技术结合
  8. JS二维数组排序组合
  9. 基于android的电子词典设计_基于安卓Android电子词典移动客户端APP设计(AndroidStudio,SQLit...
  10. 译文 [ROM][多国语言][2015.06.11] Lenovo S750 (MTK6589) - andrea_d86-lenovos750-4.2.2
  11. linux和主机共享文件,设置Linux虚拟机与主机共享文件的方法
  12. Mac没有winnt格式_好用易操作,适用于Mac用户的5个免费FLV视频播放器
  13. 数学之美番外篇:平凡而又神奇的贝叶斯方法(转自刘未鹏)
  14. 新手选择蓝牙耳机要注意什么?双11发烧友疯狂推荐五款蓝牙耳机
  15. 基于RBF神经网络的数据预测
  16. 2019届计算机专业-上海国企单位(银行、证券、通信)秋招经验大杂烩
  17. EMC封装成形常见缺陷
  18. 1688商品详情接口
  19. 计算机教师 师德演讲,关于师德师风演讲稿(精选11篇)
  20. CSS学习笔记(学习中)

热门文章

  1. 博科:毫不迟疑地入软件网络时代
  2. 我猜后台管理路径猜解
  3. oracle远程连接配置
  4. 西南石油大学计算机科学院信息,梁宗文 - 西南石油大学 - 计算机科学学院
  5. 电缆桥架安装规范标准_电缆桥架怎么安装,桥架安装工艺分享
  6. 优化算法-共轭梯度法
  7. 最近有不少网友给我的书提出了问题,并要求尽快出版第二版
  8. 论文笔记 《Maxout Networks》 《Network In Network》
  9. (转载)详解Hive配置Kerberos认证
  10. 人类无法抗拒的10种心理(转)