2012-03-01 58 views
0

编辑清晰度:什么会导致虚拟化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,尝试测量其所有项目?

+0

在第三段落并不清楚你指的是什么。什么是“生成列表中的所有项目”。您有两个列表和两个ListView - 通过唯一的名称引用它们。请发布ListViews和SelectionChanged处理程序的XAML。 – Paparazzi 2012-03-01 15:06:39

+0

你怎么知道它正在生成所有项目? – 2012-03-01 15:06:57

+0

它经历了每个项目的模板(我在元素的ToString()中放置了一个断点来检测它)。我的意思是生成ListView2的所有ItemContainers和Items。我将编辑该问题以添加所需的代码部分。 – Spez 2012-03-01 15:35:19

回答

0

我找到了导致我的List产生所有元素的情况。它与ListView有关,没有指定的宽度,并且在具有自动容器(带有自动的网格列)作为宽度。似乎在某些情况下,我还不确定,ListView会尝试生成所有元素来衡量其宽度,而不是仅使用当前可见的元素。

我认为它始终没能做到这一点,但在我的应用程序这种特殊情况下,现在它...

相关问题