WPF DataGridの列ヘッダーの並べ替えマーカーがCollectionViewSourceの現在の並べ替え順序と同期されるようにするには(できれば純粋にXAMLで)どのように達成しますか?
たとえば、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に指示する方法を探しています。