您如何实现(最好纯粹在 XAML 中)WPF DataGrid 的列标题中的排序标记与 CollectionViewSource 中的当前排序顺序同步?
例如,我有以下示例代码,它显示了 C:\ 中所有文件的属性,按长度排序:
<Window x:Class="DataGridSortTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<CollectionViewSource x:Key="items" Source="{Binding Files}">
<CollectionViewSource.SortDescriptions>
<cm:SortDescription PropertyName="Length"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid>
<DataGrid ItemsSource="{Binding Source={StaticResource items}}"/>
</Grid>
</Window>
MainWindow.xaml.cs 中的代码隐藏是:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Files = Directory.GetFiles(@"C:\").Select(f => new FileInfo(f)).ToList();
DataContext = this;
}
public IEnumerable<FileInfo> Files { get; private set; }
}
当我启动这个程序时,它看起来像这样:
即文件排序正确,但标题中的标记丢失。使用“标记”,我的意思是:
注意:我正在寻找通用解决方案。只是设置DataGridColumn.SortDirection
不是解决方案。我正在寻找一种方法来指示 DataGrid 从集合视图中自动检索排序顺序。