Question

édité pour clarté:

J'ai 2 listeView i mon application. Le premier contient une liste >. L'affichage des éléments de la liste est amplifié pour afficher uniquement la clé (chaîne). Lorsque l'utilisateur sélectionne un élément de cette liste (Selectchanged), il modifie l'itemSource de ma deuxième listeView à la valeur du clavier.

Ceci est placé dans une grille avec une largeur de colonne d'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>

Le style SearchListStyle ne consiste à enregistrer qu'un bloc de texte indiquant la clé (puisqu'elle contient des claviers). ELEMENTLV est un petit bloc de texte avec des exécutions liées à diverses propriétés et des valeurs de totrage de mes éléments.

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;
     }

Ces liste qui peuvent être affichées dans la liste de recherche de SearchResults peuvent avoir un grand nombre d'éléments (100K +). J'ai mis l'issutualisation sur la deuxième liste de liste et la plupart du temps, cela fonctionne comme un charme.

Mais parfois, je ne peux pas vraiment mettre mon doigt sur ce qui le cause (trop rapide a cliquez pour sélectionner un élément peut-être?) L'application décide qu'il doit générer tous les éléments de la liste (qui n'est pas recherché évidemment). ..

Quelqu'un peut-il me dire dans la bonne direction? Y a-t-il une raison pour laquelle les chercheurs décideraient de demander à générer tous les articles?

pourrait-il être lié à la largeur des éléments et de la liste de rechercheResults, lors de la mesure, en essayant de mesurer tous ses éléments?

Était-ce utile?

La solution

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...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top