Ich muss ListView mit verschiedenen Elementen anzeigen (insgesamt 10-15 Elementtypen). Dazu benutze ich DataTemplateSelector. Dies führt jedoch beim Crawlen zu merkwürdigem ListView-Verhalten: Irgendwann springt es an den Anfang der Listenansicht. Ich habe diesen Artikel für UWP gefunden: https://msdn.microsoft.com/en-us/windows/uwp/debug-test-perf/optimize-gridview-and-listview. Es besagt, dass ItemTemplateSelector nur 5 DataTemplates unterstütztWinRT ListView UI Virtualisierung und DataTemplateSelector mit vielen Vorlagen (10-15)
Darüber hinaus berücksichtigt ein Elementvorlage-Selektor nur fünf mögliche Kandidaten bei der Beurteilung, ob ein bestimmter Container für das aktuelle Datenelement wiederverwendet werden kann.
Ich denke, das ist der Grund. Ich habe versucht, die Anzahl der DataTemplates, die von meinem DataTemplateSelector zurückgegeben wurden, zu reduzieren, und das Problem wurde behoben: Das Scrollen funktioniert wie erwartet. Aber wie kann ich dieses Problem lösen, ohne die Anzahl der DataTemplates zu reduzieren? Ich weiß, dass ich die Virtualisierung deaktivieren kann, aber ich möchte sie nach Möglichkeit aktiviert lassen.
Für UWP gibt es eine Option für das Verwenden des ChoingItemContainer-Ereignisses, das jedoch nicht für WinRT verfügbar ist.
Ist es möglich, dieses Problem zu lösen, ohne die UI-Virtualisierung in WinRT zu deaktivieren?
Benötigen Sie wirklich 10-15 verschiedene Datatemplates? Beachten Sie, dass Sie in Ihrer Datamaplle die Sichtbarkeit des Panels und der Steuerelemente einstellen können, so dass Sie beispielsweise nur ein ItemTemplate haben können, das verschiedene Informationen basierend auf dem aktuellen Datenkontext jeder Zeile anzeigt. –
Ja. Es ist etwas wie Fragebogen mit verschiedenen Eingabesteuerelementen: Text, Datumsauswahl, Kontrollkästchen, Combobox, Radiobuttons, Tabellen usw. ViewModels können unterschiedliche Logik haben (z. B. die Art, wie Antworten geladen und gespeichert werden). Es ist also nicht gut, es in einem Modell zu mischen ... –