編輯清晰度:什麼會導致虛擬化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