记住WPF DataGrid排序顺序

问题描述 投票:1回答:1

这是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的多列排序设置?

c# wpf data-binding datagrid
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.