热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ListView/避免可重入滚动事件中的"无限滚动"

如何解决《ListView/避免可重入滚动事件中的"无限滚动"》经验,谁能帮忙解答一下?

我的目标是在WPF中模拟"无限滚动" ListView.我用一些不太理想的方法完成了这项任务,我确信有更好的方法.

通过"无限滚动"我的意思是:
让我们说一个ListView有20个项目(有序1, 2, 3, 4, ... 17, 18, 19, 20).当用户向下滚动一个项目时,该项目顶部的项目ListView被移除并放置在项目的结尾处,ListView因此项目的顺序是2, 3, 4, 5, ... 18, 19, 20, 1.现在,如果用户向下滚动两个项目,则前两个项目将被移除并放置在最后,因此项目的顺序为4, 5, 6, 7, ... 20, 1, 2, 3.现在,类似地,如果用户向上滚动一个项目,则将其底部的项目ListView移除并放置在开头,以便项目的顺序为3, 4, 5, 6, ... 19, 20, 1, 2.

我已经实现这个任务与分配给下面的功能ScrollChanged的情况下,ScrollViewer我希望是"无限":

// sv - the ScrollViewer to which this event handler is listening
// lv - the ListView associated with "sv"
bool handle_scroll = true;
private void inf_scroll(object sender, ScrollChangedEventArgs e) {
    if (handle_scroll) {
        for (int i = 0; i  e.VerticalChange; i--) {
            object tmp = lv.Items[lv.Items.Count - 1];
            lv.Items.RemoveAt(lv.Items.Count - 1);
            lv.Items.Insert(0, tmp);
            handle_scroll = false;
        }
        if(!handle_scroll){
            sv.ScrollToVerticalOffset(sv.VerticalOffset - e.VerticalChange);
        }
    }
    else {
        handle_scroll = true;
    }
}

注意变量handle_scroll.我把它放到位是因为调用sv.ScrollToVerticalOffset将导致整个inf_scroll函数被递归调用,如果不存在的话.

知道滚动ScrollViewer一个ScrollChanged事件处理程序是不好的做法,所以这就是我要问的原因:有更好的方法吗?如何防止递归调用inf_scroll?有没有更好的方法来模拟"无限滚动"?


推荐阅读
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • ListView想要做到上下翻页的效果需要使用如下参数positionViewAtIndex(intindex,PositionModemode)P ... [详细]
  • 这期内容当中小编将会给大家带来有关怎么在asp.net中获取ListView与gridview中当前行的行号,文章内容丰富且以专业的角度为大家分析和叙述, ... [详细]
  • 【Android开发】 ListView使用实战详解,你get到了嘛?
    【Android开发】ListView使用实战详解,你get到了嘛?-目录一、什么是ListView?二、ListView的简单用法三、ListView点击响应事件hel ... [详细]
  • 这个是listview的item布局,当在list中滚动时,每个item的高度会随机变化,导致显示混乱,多滚动几次高度又显示正常了,怎么回事呢?<?xmlversion1.0 ... [详细]
  • ListView 应用5 - 数据库的增删改查及分页
    郁闷了好长一段时间,做了各种各样的修改,就是“删除”无法执行,罪魁祸首竟然是ListView控件中少设置了一个DataKeyNames属性,悲哀啊!defau ... [详细]
  • [java]viewplaincopyprint?ListViewlistViewgetListView(); ... [详细]
author-avatar
苦咖啡青柠檬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有