明確にするために編集:
私のアプリケーションには2つのListViewがあります。最初のものには、List <KeyPair <String、List<Elements>>が含まれています。リスト内のアイテムの表示は、キー(文字列)のみを表示するようにテンプレート化されています。ユーザーがこのリスト(SelectionChanged)でアイテムを選択すると、2番目のListViewのItemSourceがキーペアの値に変更されます。
これは、列幅がAutoのグリッド内に配置されます。
<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には、キーを示すTextBlockのみが含まれます(KeyPairが含まれているため)。ElementLVは、Runsがさまざまなプロパティと要素の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を2番目のリストビューに配置しましたが、ほとんどの場合、それは魅力のように機能します。
しかし、時々、私はそれを引き起こす原因に完全に指を置くことができません(多分アイテムを選択するためにクリックするのが速すぎますか?)アプリケーションはそれがリスト内のすべてのアイテムを生成しなければならないと決定します(これは明らかに望まれていません)...
誰かが私を正しい方向に向けることができますか?SearchResultsがすべてのアイテムの生成を要求する理由はありますか?
測定時に、すべてのアイテムを測定しようとすると、アイテムの幅とSearchResults ListViewにリンクできますか?