WPFXamlScrollViewer围绕列表视图-向下滚动c#CSharp时延迟加载项目



我有一个列表视图绑定到具有子集合的复杂对象的可观测集合。可观察集合包含所有对象。在列表视图中加载非常慢,所以我想延迟加载列表视图。列表视图中唯一可编辑的项是集合中对象的字符串属性。我通过绑定到要显示的项数属性的有限集合来限制列表视图中的项数。理想情况下,当用户向下滚动时,它将加载更多的项目。我遇到的问题是,当滚动更改触发时,我会增加要显示的项目数的绑定属性,但随后会出现视图,滚动查看器再次滚动,因此本质上它只是不断更新属性并加载所有项目。有什么方法可以捕捉列表视图末尾的向下滚动并只处理一次增量?我正在使用f (scrollViewer.VerticalOffset >= scrollViewer.ScrollableHeight/2 && scrollViewer.VerticalOffset != 0)以检测列表末尾的滚动,但随着项目的添加,将其带入视图会一次又一次地触发滚动。有类似的例子吗?另一种选择是将listview绑定到一个单独的字符串列表,但如何将列表项字符串绑定到可观察集合中某个项的相同属性以进行更新?

寻找想法。

另一方面,我让它通过列表视图底部的按钮加载更多项目,但我不需要按钮,我希望滚动执行与按钮相同的功能(通过增加决定显示多少项目的属性值来加载更多项目(,但我无法阻止它在每次加载项目时连续触发滚动更改事件。我需要能够1(加载更多项目2(滚动到列表视图的底部以显示添加的项目3(停止加载项目,直到用户再次尝试进一步向下滚动。

一个想法:在触发加载项目之前,您可以将项目当前存储在底部。

然后触发加载,但在允许它再次触发之前,将缓存的项目带回视图,这有望使它再次向上滚动:

https://learn.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.bringintoview?view=windowsdesktop-6.0

既然你不再处于底部,它有望防止它一次又一次无休止地触发。

可能有一种更优雅的技术,可以将其中一个项目的垂直位置存储在滚动视图中,然后在加载更多项目后,重置滚动视图,使项目处于完全相同的垂直位置。这将使其更加无缝。

另一种方法可能是只在超时时进行延迟加载,而不是重复进行。

最新更新