我有一个在虚拟模式下工作的 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/