ScrollViewer langsame Leistung mit DataGrid

8

Ich habe folgendes Szenario:

%Vor%

Wenn ich nun DataGrid mit einer großen Datenmenge (etwa 10.000 Zeilen) binde, habe ich eine sehr langsame Performance. In der Tat bekomme ich OutOfmemory Ausnahme (und ich habe 8 GB Speicher)! Ich habe irgendwo gelesen, dass dies daran liegt, dass ScrollViewer die DataGrid-Virtualisierung (oder etwas Ähnliches) außer Kraft setzt, aber ich weiß nicht, wie ich das verhindern kann. Wenn ich den ScrollViewer entferne, ist das Problem gelöst! Die Daten werden in weniger als einer Sekunde geladen.

Ich möchte den ScrollViewer behalten (wegen anderer Kontrollen) und gute Leistung haben. Ist das möglich? Wenn nicht, gibt es eine andere Lösung - Workaround?

    
Vale 31.08.2011, 08:22
quelle

2 Antworten

7

Eine gängige Problemumgehung für diese Art von Problemen besteht darin, ein unsichtbares "Dimensionierungselement" in derselben Zeile wie DataGrid hinzuzufügen und dann DataGrid.Height an ActualHeight des Dimensionierungselements zu binden. Auf diese Weise wird Ihr DataGrid immer die Höhe von RowDefinition verbrauchen. Beispiel

%Vor%     
Fredrik Hedblad 31.08.2011, 12:14
quelle
2

Der äußere ScrollViewer gibt dem DataGrid effektiv soviel Platz, wie es möchte, so dass seine Höhe groß wird und alle Zeilen gleichzeitig angezeigt werden. Beschränken Sie einfach das DataGrid, indem Sie beispielsweise explizit eine Höhe festlegen.

    
H.B. 31.08.2011 08:47
quelle

Tags und Links