这是这个问题的延续。
1. 设置
我有一个WPF窗口,其中包含一个动态创建项目的TabControl
。 此TabControl
的ItemSource
绑定到Group
列表。 这些组包含在上显示的元素列表中的DataGrid
。
XAML:
<Window x:Name="window" x:Class="TestWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:TestWpf"
Title="MainWindow" Height="350" Width="525">
<TabControl x:Name="tabControl" BorderThickness="0" ItemsSource ="{Binding Groups, ElementName=window, NotifyOnSourceUpdated=True}">
<TabControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:Group}">
<TextBlock Padding="2" Text="{Binding Name}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate x:Name="contentTemplate" DataType="{x:Type vm:Group}">
<DataGrid x:Name="dgElements" ItemsSource="{Binding Elements, BindsDirectlyToSource=True}" DockPanel.Dock="Top" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="clmName" Header="Name" Binding="{Binding Name}" IsReadOnly="True" CanUserReorder="False" />
<DataGridTextColumn x:Name="clmDesc" Header="Description" Binding="{Binding Description}" IsReadOnly="True" CanUserReorder="False" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Window>
这一切都很好。
2. 问题
DataGrid
支持开箱即用的多列排序。但不幸的是,如果我在选项卡页之间切换,则排序将丢失。
我希望每个选项卡/数据网格都保留多列排序。
可以将DataGridTextColumn
的SortDirection
绑定到属性,但这不记忆列的排序顺序。调试时发现,当我切换选项卡时,SortDirection
在新的ItemSource
被设置之前重置了,因此我无法存储此信息。
问题是:如何在每个选项卡/数据网格中保留多列排序设置?