我有一个列表视图绑定到一个复杂对象的可观察集合,该集合包含所有对象。在列表视图中加载非常慢,所以我想延迟加载列表视图。列表视图中唯一可编辑的项是集合中对象的字符串属性。我通过一个绑定到要显示的项目数属性的有限集合来限制列表视图中的项目数。理想情况下,当用户向下滚动时,它会加载更多的条目。2我遇到的问题是当滚动改变触发时,我增加了要显示的条目数的绑定属性,但随后出现进入视图并且滚动查看器再次滚动,因此本质上它只是连续更新属性并加载所有项目。有什么方法可以捕获列表视图末尾的向下滚动并且只处理一次增量吗?我使用f (scrollViewer.VerticalOffset >= scrollViewer.ScrollableHeight/2 && scrollViewer.VerticalOffset != 0)
来检测列表末尾的滚动,但是在添加项目时,将其带入视图会一次又一次地触发它。有类似的示例吗?另一个选择是将列表视图绑定到一个单独的字符串列表,但是如何将列表项字符串绑定到可观察集合中某个项的同一属性以进行更新呢?
寻找创意。
在另一个注意事项,我有它的工作通过一个按钮在底部的列表视图加载更多的项目,但我不需要一个按钮,我希望滚动条执行与按钮相同的功能(通过增加确定显示多少项的属性值来加载更多项),但我无法阻止它在每次加载项时连续触发scroll changed事件。我需要能够1)加载更多的项目2)滚动到列表视图的底部显示添加的项目3)停止加载项目,直到用户试图再次进一步向下滚动。
1条答案
按热度按时间cu6pst1q1#
一个想法:就在之前你触发加载项目,你可以存储项目目前在底部。
然后触发加载,但在允许它再次触发之前,将缓存的项重新显示在视图中,这可能会导致它再次向上滚动:
https://learn.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.bringintoview?view=windowsdesktop-6.0
既然你已经不在底部了,希望它能阻止它一次又一次地无休止地触发。
还有一种更好的方法,你可以在滚动视图中保存一个条目的垂直位置,然后在加载更多条目后,重新设置滚动视图,使条目处于完全相同的垂直位置。这会使它更加无缝。
另一种方法可能是简单地只在超时时发生惰性加载,而不是使其重复发生。