记住WPF DataGrid排序顺序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记住WPF DataGrid排序顺序相关的知识,希望对你有一定的参考价值。

这是this question的延续。

1. Setup

我有一个wpf窗口,其中包含一个动态创建的项目的TabControl。这个ItemSourceTabControlGroups列表绑定。这些组包含在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>

一切正常。

2. The Question

DataGrid允许开箱即用的多列排序。但不幸的是,如果我在标签之间切换,排序就会丢失。 我希望为每个tabpage / datagrid维护多列排序。

可以将SortDirectionDataGridTextColumn绑定到属性,但是不记得列的排序顺序。调试我发现当我切换tabpage时,SortDirection在新的ItemSource设置之前被重置,所以我无法存储它。

问题是:如何保持每个tabpage / datagrid的多列排序设置?

以上是关于记住WPF DataGrid排序顺序的主要内容,如果未能解决你的问题,请参考以下文章

WPF 中的 Datagrid - 1 列默认排序

WPF 精修篇 DataGrid 数据源排序

在 WPF 中对 DataGrid 进行预排序

使用 C# 在 WPF 中使 DataGrid 列标题可排序

WPF DataGrid 列宽和重新排序

在wpf设计的界面中,我通过DataGrid建立列表,我想通过点击列表头进行排序。