C# 什么会导致虚拟化ListView有时生成所有项?
为清晰起见进行了编辑: 我有两个ListView我的应用程序。第一个包含一个ListC# 什么会导致虚拟化ListView有时生成所有项?,c#,wpf,listview,virtualizingstackpanel,C#,Wpf,Listview,Virtualizingstackpanel,为清晰起见进行了编辑: 我有两个ListView我的应用程序。第一个包含一个List
<ListView ItemsSource="{Binding Path=FunctionIndex.Index}"
Name="completeFunctionIndexView"
Style="{StaticResource SearchListStyle}"
SelectionChanged="functionIndexView_SelectionChanged" />
<ListView Name="SearchResults"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListView.View>
<GridView >
<GridViewColumn
CellTemplate="{StaticResource ElementLV}"
Width="Auto"/>
</GridView>
</ListView.View>
</ListView>
样式SearchListStyle仅包含显示键的文本块,因为它包含键对。
ElementLV是一个小文本块,其运行绑定到my元素的各种属性和ToString值
private void functionIndexView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//This supposes we want to support a "multiple selection search"
//for now this isn't implemented
List<Element> Results = new List<Element>();
foreach (KeyValuePair<String, List<Element>> item in e.AddedItems)
{
Results = item.Value;
break;
}
SearchResults.ItemsSource = Results;
}
可以在SearchResults listview中显示的这些列表可以包含大量元素100k+。我把isvirtualization放在了第二个列表视图中,大多数时候它都很有魅力
但有时,我不能很好地指出是什么原因导致它太快点击选择一个项目可能?应用程序决定它必须生成列表中不需要的所有项
有人能给我指出正确的方向吗?搜索结果决定要求生成所有项目是否有原因
它是否可以链接到项目的宽度和SearchResults ListView,在测量时,尝试测量其所有项目?我发现了导致我的列表生成所有元素的情况。它与ListView有关,它没有指定的宽度,并且在一个带有Auto的容器中使用一个带有Auto作为宽度的网格列。在我还不确定的特定情况下,ListView试图生成所有元素来测量它们的宽度,而不是只使用当前可见的元素
我想它并不总是这样,但在我的应用程序中的这种特殊情况下,现在它确实 在第三段中,我不清楚你指的是什么。什么是生成列表中的所有项目。您有两个列表和两个列表视图-通过唯一的名称引用它们。请发布ListViews和SelectionChanged处理程序的XAML。您如何知道它正在生成所有项?它会对每个项进行模板化,我在元素的ToString调用中放置了一个断点来检测它。我的意思是生成ListView2的所有ItemContainers和Items。我将编辑该问题以添加所需的代码部分。