编辑清晰度:什么会导致虚拟化ListView有时会生成所有项目?
我有2个ListView我的应用程序。第一个包含一个列表< KeyPair <字符串,列表<元素>>。列表中项目的显示是模板化的,只显示键(字符串)。当用户在这个列表(SelectionChanged)中选择一个项目时,它将我的第二个ListView的ItemSource更改为Keypair的值。
这被放置在一个Grid宽度为Auto的Grid中。
<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>
Style SearchListStyle只能构造一个显示Key的TextBlock(因为它包含KeyPairs)。 ElementLV是一个小型文本块,其运行绑定了不同的属性和我的元素的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列表视图中显示的列表可以包含大量的元素(100k +)。我已经把第二个列表视图的IsVirtualizing,并且大部分时间它像魅力一样工作。
但是有时候,我无法完全明白导致它的原因(点击太快来选择一个项目可能?)应用程序决定它必须生成列表中的所有项目(显然不需要) ...
有人能指出我正确的方向吗? SearchResults会决定要求生成所有项目吗?
当测量时,它是否可以链接到项目的宽度和SearchResults ListView,尝试测量其所有项目?
在第三段落并不清楚你指的是什么。什么是“生成列表中的所有项目”。您有两个列表和两个ListView - 通过唯一的名称引用它们。请发布ListViews和SelectionChanged处理程序的XAML。 – Paparazzi 2012-03-01 15:06:39
你怎么知道它正在生成所有项目? – 2012-03-01 15:06:57
它经历了每个项目的模板(我在元素的ToString()中放置了一个断点来检测它)。我的意思是生成ListView2的所有ItemContainers和Items。我将编辑该问题以添加所需的代码部分。 – Spez 2012-03-01 15:35:19