Nachdem die banale Sortierung eines Datagrids normal keine große Sache sein sollte hier dennoch meine Lösung da es leider defakto nicht so ist. Füllt man nämlich die Daten im Code behind via Itemssource und hat zusätzlich noch eine DataGridTemplateColumn funktioniert die Sortierung nicht! Außer man geht genau so vor wie ich es hier beschreibe:
1. Festlegen der Grideigenschaft CanUserSortColumns auf true 2. Festlegen des SortMemberPathin den Eigenschaften des DataGridTemplateColumn im XAML 3. Setzen der ItemsSource="{Binding}" (Dummy) in den Grideigenschaften (!!!) 4. Füllen des Grids via Datacontext und konvertierung dieser als Liste!!!!
Klingt komisch ist aber so. Hier also als Beispiel:
DataGrid Name="grdLast" AutoGenerateColumns="False" AlternationCount="2" CanUserSortColumns="True" SelectedValuePath="aktivitaets_id" ItemsSource="{Binding}" IsReadOnly="True" SelectionMode="Single" DataGridTemplateColumn Header="Datum" MinWidth="120" SortMemberPath="datum" grdLast.DataContext = (From o In db.xxx).ToList
1000 Seiten zu DataGrid Performance, keine hat geholfen. Versuchthabe ich folgende empfohlenen Verbesserung der Eigensdchaften:
VirtualizingPanel.IsVirtualizing="False"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
Leider brachte das bei mir nicht den erhofften Erfolg. Folgende Erweiterung des Grids im XAMLbrachte zumindest bei mir den erwünschten Erfolg:
ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=DataContext,IsAsync=True}"
ScrollViewer.CanContentScroll="False"
Also, das Binding der Itemssource auf Asnychron umstellen und die Eigenschaft CanContentScroll des übergeordneten internen Scollviewers.
TRICK: Itemssource enthält deshalb einen Verweis auf sich selbst, da aufgrund des Sortings im Codebhin die Datacontext Eigenschaft gesetzt wird!