Domanda

Modificato per chiarezza:

Ho 2 Listview I La mia applicazione. Il primo contiene una lista >. La visualizzazione degli elementi nell'elenco è planata per mostrare solo la chiave (stringa). Quando l'utente seleziona un'elemento in questo elenco (SelectionChanged), modifica gli elementi del mio secondo elenco per il valore della tastiera.

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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top