gpt4 book ai didi

c# - 如何获取 ListView 中的起始索引和可见项数?

转载 作者:行者123 更新时间:2023-11-30 12:37:39 26 4
gpt4 key购买 nike

我有一个在虚拟模式下工作的 ListView ,在 LargeIcons View 中。检索很昂贵,所以我想询问所有可见项目的数据。如何获取起始索引和可见项总数?

更新:我知道 CacheVirtualItems 事件。我们使用的第三方数据库检索一条记录需要大约 3 秒,但检索一千条记录需要大约 4 秒,所以我必须以大块的形式进行。我需要确保可见记录在我们检索的记录中,因此我需要知道可见项的起始索引和总数。如果这不可行,我将不得不找到一个解决方法(这可能涉及使用带有大量图像单元格的 DataGridView 来模仿 LargeIcons View ),但如果可能的话我想正确地做到这一点。

最佳答案

真正的答案是:
* 获取ListView的ScrollViewer。
* ScrollViewer.VerticalOffset 是第一个显示项的索引。
* ScrollViewer.ViewportHeight 是显示的项目数。

要获取 ScrollViewer,您需要一个函数,将搜索的 FindDescendant(FrameworkElement, Type) 在 children 的列表显示。在加载 Window 后调用它。

VB.Net 和 C# 中的代码:

Public Function FindDescendant(ByVal MyElementToSeek As FrameworkElement, _
ByVal TypeToFind As Type) As FrameworkElement
If MyElementToSeek Is Nothing Then Return Nothing
If MyElementToSeek.GetType() = TypeToFind Then Return MyElementToSeek
For i = 0 To VisualTreeHelper.GetChildrenCount(MyElementToSeek) - 1
Dim OneChild = TryCast(VisualTreeHelper.GetChild(MyElementToSeek, i), FrameworkElement)
Dim Result = FindDescendant(OneChild, TypeToFind)
If Result IsNot Nothing Then Return Result
Next
Return Nothing
End Function

.

public FrameworkElement FindDescendant(FrameworkElement MyElementToSeek, 
Type TypeToFind)
{
if (MyElementToSeek == null) return null;
if (MyElementToSeek.GetType() == TypeToFind) return MyElementToSeek;
for (i = 0;
(i<= (VisualTreeHelper.GetChildrenCount(MyElementToSeek) - 1)); i++)
{
object OneChild = TryCast(VisualTreeHelper.GetChild(MyElementToSeek, i),
FrameworkElement);
object Result = FindDescendant(OneChild, TypeToFind);
if (Result) return Result;
}
return null;
}
}

' MyScrollViewer = FindDescendant(MyListView, ScrollViewer)

关于c# - 如何获取 ListView 中的起始索引和可见项数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com