这是this question的延续。
我有一个wpf窗口,其中包含一个动态创建的项目的TabControl
。这个ItemSource
的TabControl
与Group
s列表绑定。这些组包含在DataGrid
上的TabPage
中显示的元素列表。
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>
一切正常。
DataGrid
允许开箱即用的多列排序。但不幸的是,如果我在标签之间切换,排序就会丢失。
我希望为每个tabpage / datagrid维护多列排序。
可以将SortDirection
的DataGridTextColumn
绑定到属性,但是不记得列的排序顺序。调试我发现当我切换tabpage时,SortDirection
在新的ItemSource
设置之前被重置,所以我无法存储它。
问题是:如何保持每个tabpage / datagrid的多列排序设置?