2012-03-01 35 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會嘗試生成所有元素來衡量其寬度,而不是僅使用當前可見的元素。

我認爲它始終沒能做到這一點,但在我的應用程序這種特殊情況下,現在它...

相關問題