Heute habe ich beschlossen, endlich das virtualisierte TreeView auszuprobieren. Um dies zu tun, ist eine Bindung erforderlich. Also entschied ich mich, 2 Dinge zu testen - HierarchicalDataTemplate basierend auf Typen + Virtualisierung.
Ich habe eine Basisklasse für einige Daten erstellt. Erstellt 2 abgeleitete Klassen aus der Basisklasse. Hat 2 HierarchicalDataTemplate erstellt (1 für jede abgeleitete Klasse), um unterschiedliche Formatierungen von Knoten zu erhalten. Und läuft Population von 10k Knoten von 2 Arten.
Klassen:
%Vor%Generierung von 10k Knoten der 1. Ebene mit einigen Kindern, Bindung:
%Vor%XAML mit HierarchicalDataTemplates:
%Vor%Alles funktioniert gut:
Beim Scrollen zu Header # 1000 und dem Erweitern würde die Scroll-Position jedoch zu einer anderen Stelle springen, wodurch der erweiterte Knoten und seine untergeordneten Elemente NICHT sichtbar werden.
Was habe ich falsch gemacht? Gibt es eine Möglichkeit, das zu beheben?
Update: Durch das Entfernen der Virtualisierung wird auch der Bildlauffehler entfernt.
Nachdem viele Probleme mit der Baumvirtualisierung in C # WPF aufgetreten sind (einschließlich des Hauptproblems, dass nur die allererste Ebene virtualisiert wird), konnte ich keine richtige Lösung finden. Microsoft hat einen Fehlerbericht akzeptiert und geantwortet, dass das Scrollen in einer der zukünftigen Versionen behoben wird.
Was die endgültige Lösung für mich persönlich betrifft - ich habe zu einer eigenen Implementierung von ListTreeView gewechselt, d. h. mit List und Simulationsbaum. Dies löste alle Probleme mit der Virtualisierung und mit Scrollverhalten. Das einzige Problem war - Entfernen vieler Elemente nach dem Zusammenfalten des Baumknotens. Ich musste eine Überprüfung durchführen, wenn es einfacher / schneller ist, einfach eine neue Liste neu zu erstellen, anstatt die Elemente 1 zu 1 zu löschen.
Ich würde mich freuen, wenn jemand1 das einfach in seiner Umgebung testen und das Problem bestätigen könnte. Auch ein bisschen herumzuspielen fand ein anderes merkwürdiges Verhalten:
Als nächstes führe das Programm aus:
Führe das Programm erneut aus (für die Reinheit des Experiments)
Das Erweitern eines der ersten Knoten scheint ein Workaround zu sein.
Ich habe eine Lösung auf MSDN gefunden. Anscheinend hat es etwas mit der Standard-TreeView-Vorlage zu tun. Das folgende Problem behebt das Flimmern der Bildlaufleiste und verhindert, dass zufällige Knoten beim schnellen Blättern expandieren.
%Vor%Ich habe schnell geblättert und schien kein Problem mehr zu bemerken. Das Tolle daran ist, dass Sie Ihre Virtualisierung nicht einmal abschaffen müssen.