2016-07-11 10 views
0

Ich bin eine Listenansicht ähnlich den folgenden verwenden:UWP Listenansicht Hinzufügen von großen Datenmengen

<ListView Margin="10" Name="myListView"> 
<ListView.ItemTemplate> 
     <DataTemplate> 
      <WrapPanel> 
       <TextBlock Text="Name: " /> 
       <TextBlock Text="{Binding Name}" FontWeight="Bold" /> 
       </WrapPanel> 
     </DataTemplate> 
</ListView.ItemTemplate> 

Ich bin eine Liste aller Dateien in einem Verzeichnis erstellen; eine potenziell sehr große Anzahl. Das Laden des Datensatzes steht hier nicht in Frage; Ich verarbeite die Daten vor (Laden aus der Datei, Erzeugen einer temporären Liste <>, Sortieren, usw.), damit die IO-Leistung kein Problem ist.

Mit meiner vorbelegt Liste <> Objekt ich dann eine einfache foreach und fügen:

private async Task AddItemsToList() 
{ 
    foreach(MyObject item in List<MyObject>) 
    { 
     myListView.Add(item) 
    } 
} 

Die oben ein Mock-up ist, aber mein Code gleich ist.

Bei der Verarbeitung wird die Benutzeroberfläche nicht aktualisiert, wenn die einzelnen Elemente hinzugefügt werden. Es wird als ein großer Block angezeigt, sobald die Foreach abgeschlossen ist. AddItemsToList() ist wird nicht erwartet.

Ich habe ein paar Artikel gelesen (particularly this) und habe den Eindruck, dass UWP automatisch inkrementell laden und Platzhalter verwenden sollte.

Alle Vorschläge würden sehr geschätzt werden!

Andrew,

Anmerkung: Ich bin mir bewusst, UI-Virtualisierung würde für übermäßigen Datensätze (> 10.000 Artikel?) Ideal als described here.

+0

Vielleicht ein Beispielprojekt mit Beispieldaten für nicht funktionierende Teile. Und ja, es wird empfohlen, die UI-Virtualisierung für große Datenmengen zu verwenden. –

Antwort

0

Haben Sie versucht, MVVM und eine ObservableCollection zu verwenden, und fügen Sie Elemente direkt in der ObservablCollection nach dem Lesen aus der Datei. Stellen Sie außerdem sicher, dass Ihr Lese- und Verarbeitungsvorgang asynchron ist.

+0

Danke Alex. Leider habe ich den Code hinter dem ListView nicht veröffentlicht. Die Unterstützung "listview.xaml.cs" implementiert eine ObservableCollection. Leider kann ich nicht direkt hinzufügen, da ich den Daten etwas "verarbeite" (Summieren, Umordnen, Markieren usw.), was eine Analyse des gesamten Datensatzes erfordert. Ich dachte, es wäre schneller/einfacher, die Benutzeroberfläche nicht mehrmals zu ändern. Die Datei IO/Verarbeitung ist alles asynchron. – Incipient

+0

Sie sollten die Quelle in der Liste des Modells hinzufügen und wenn die Benutzeransicht dann von Model.Use MVVM anzeigen und die Benutzeransichtsnummer hinzufügen. – lindexi

Verwandte Themen