如何在虚拟模式下枚举ListView?
我正在使用OfType<>()
方法枚举列表视图项。但它抛出了一个例外,列表视图在虚拟模式下无法枚举。
这是我的代码
List<String> lst= myListView.Items.OfType<ListViewItem>().Select(X=>X.Text).ToList();
那么当它处于虚拟模式时,如何从ListView中获取该项?
请给我一个使用方法.OfType&lt;&gt;
提前致谢
答案 0 :(得分:2)
当它处于虚拟模式时,您无法从列表视图中获取项目,因为这些项目不在列表视图中。这就是虚拟模式的重点。
而是按住项目,列表视图会询问显示项目所需的信息。如果您在虚拟模式下成功运行列表视图,那么您几乎肯定已经将列表中的项目放在某处。
将VirtualMode属性设置为 true将ListView置于虚拟状态 模式。在虚拟模式下,正常 物品收集未使用。代替, ListViewItem对象已创建 动态,如ListView所需 它们。
虚拟模式在很多情况下都很有用 情况。如果是ListView对象 必须从一个非常大的人口填充 已经在内存中创建的集合 每个条目的ListViewItem对象 可能很浪费仅在虚拟模式下 创建所需的项目。在 其他情况下,价值观 可能需要ListViewItem对象 经常重新计算,并做 这对整个系列来说都会 产生不可接受的表现。在 虚拟模式,只需要所需的项目 计算。
答案 1 :(得分:0)
如果在列表处于虚拟模式时调用它,则ListViewItemCollection.GetEnumerator()
方法会引发异常。这意味着您无法通过任何LINQ方法访问它们,包括OfType()
。
但是,您可以对列表进行简单的迭代:
List<string> lst = new List<string>();
for (int i = 0; i < listView1.VirtualListSize; i++) {
lst.Add(listView1.Items[i].Text);
然而(再次),如果列表是虚拟的,它可能包含大量项目,因此可能需要一段时间:)