Leistungsprobleme beim Verschieben / Ausblenden von Spalten in großen WPF-Datagrids

9

Ich verwende wpf datagrid, um große Datenmengen anzuzeigen (etwa 100 Spalten und 1000 Zeilen). Die Spalten sind an Eigenschaften gebunden, die mit typedescripter dynamisch hinzugefügt werden. Standardmäßig zeigt das Datagrid alle Spalten an. Wir haben jedoch Funktionen hinzugefügt, die es dem Benutzer erlauben, nur eine Teilmenge aller Spalten zu sehen, und sie können auch die Reihenfolge der angezeigten Spalten ändern. Das erreiche ich gerade, indem ich die Sichtbarkeitseigenschaft der Spalten umschalte und ihren Anzeigeindex ändere. Allerdings ist die Leistung dabei wirklich schlecht.

Im Folgenden finden Sie ein Beispiel zum Reproduzieren des Problems

Der XAML sieht ziemlich einfach aus

%Vor%

Der Code dahinter ist wie folgt

%Vor%

Dieses Ansichtsmodell reproduziert große Daten mit manuell erstellten DataTable. Jedoch im tatsächlichen Code hinter Datagrid bindet an die Klasse mit dynamischer Eigenschaft, die mit typedescripter hinzugefügt wurde

%Vor%

Ich habe folgendes versucht, aber bisher kein Glück.

1. Die Leistung ist besser, wenn ich die Zeilen- und Spaltenvirtualisierung aktiviere. Dies ruiniert jedoch die Scroll-Leistung, die nicht akzeptabel ist (besonders wenn Sie versuchen, den Daumen zu ziehen).
2. Anstatt die Anzeige und die Sichtbarkeit zu ändern, habe ich versucht, alle Spalten zu entfernen und dann nur die benötigten hinzuzufügen, aber es hat sich auch nicht auf die Leistung ausgewirkt.

Ich werde wirklich jede Hilfe mit diesem schätzen. Wir wollen keine Leistungssteigerungen auf Kosten der nachteiligen Scrollleistung. Wenn also die Virtualisierung aktiviert werden muss, können wir die Scrollleistung verbessern. Oder es gibt einen besseren Weg, um sowohl eine gute Scroll-Performance als auch eine gute Performance der Spalte show / hide / move mit so großen Datagrids zu erreichen.

    
shomat 01.12.2011, 05:15
quelle

1 Antwort

1

Sie sollten die Virtualisierung bei größeren Datensätzen wirklich eingeschaltet lassen, da sonst jede Zelle den Layout / Measure-Pass durchläuft, auch wenn sie nicht auf dem Bildschirm gerendert wird. Ich habe einen gewissen Erfolg hatte durch die Verwendung ScrollViewer.IsDeferredScrollingEnabled = „False“ das Scrollen Verhalten zu optimieren, aber alles in allem haben nicht viel Glück mit Leistung mit großen Datensätzen in der WPF-Datagrid hatte.

    
GlitterMonkey 02.12.2011 21:51
quelle

Tags und Links