Cosa avrebbe causato un elenco di virtualizzazione a volte generare tutti gli articoli?
-
14-11-2019 - |
Domanda
Modificato per chiarezza:
Ho 2 Listview I La mia applicazione. Il primo contiene una lista
Questo è posto all'interno di una griglia con una larghezza della colonna di 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>
.
Lo stile SearchListStyle Contava solo un blocco di testo che mostra la chiave (poiché contiene tastiere). Elementlv è un piccolo blocco di testo con corse legate a diverse proprietà e valori di tostring dei miei elementi.
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;
}
.
Quest'elenco che può essere visualizzato in SearchSersults ListView può avere un numero elevato di elementi (100k +). Ho messo l'isvirtualizzazione sul secondo elenco, e la maggior parte delle volte funziona come fascino.
Ma a volte, non posso mettere il dito su ciò che lo causa (troppo rapido a click per selezionare un elemento forse?) L'applicazione decide che deve generare tutti gli elementi nell'elenco (che non è ricercato ovviamente). ..
Qualcuno può indicarmi nella giusta direzione? C'è una ragione per cui i searchreesults deciderebbero di chiedere di generare tutti gli articoli?
Potrebbe essere collegato alla larghezza degli elementi e la vista di ricercaSettori, quando si misura, cercando di misurare tutti i suoi articoli?
Soluzione
I have found the situation which caused my List to generate all elements. It has to do with the ListView to have no specified Width, and beeing in a Container with Auto (a grid column with Auto ) as Width. It seems in certain condition which I'm not sure yet, the ListView tries to generate all the elements to measure their Width instead of using only those currently visible.
I'm think it didn't always do that, but in this particular situation in my application, now it does...