DataGrid 排序不起作用
DataGrid sorting doesn't work
我有一个 TabControl
,其中一个 TabItem
里面有一个 DataGrid
。
<TabControl Background="{DynamicResource StandardBackgroundColor}"
Grid.Row="2" Grid.Column="1"
BorderBrush="{DynamicResource StandardBorderColor}"
DataContext="{Binding ChartViewModel}">
<TabItem Header="{lex:Loc Data}">
<DataGrid Name="TagGrid" ItemsSource="{Binding UnionAllSerie}"
ColumnWidth="*" Background="#CCCCCC">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="{lex:Loc time}" SortDirection="Descending"
Binding="{Binding X, Converter={StaticResource OleDateToDateTimeConverter}, StringFormat=\{0:dd/MM/yy HH:mm\}}" />
<DataGridTextColumn Header="{lex:Loc Measure}"
Binding="{Binding Y}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
我的 UnionAllSerie 声明如下:
public ObservableCollection<Data> UnionAllSerie { get; set; } = new ObservableCollection<Data>();
根据对 window 执行的操作填充此数据集合。我想要的是让 Grid
按代表日期的第二列自动排序。
有人知道我做错了什么或遗漏了什么吗?
谢谢!
在 Datagrid 列上设置 SortDirection 实际上不会对该列进行排序。 (详见 here)。
我建议使用 CollectionViewSource,它具有适合您的目的的内置功能。
结果应如下所示:
<Window.Resources>
<CollectionViewSource x:Key="UnionAllSerieViewSource" Source="{Binding UnionAllSerie}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="X" Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
...
<DataGrid Name="TagGrid" ItemsSource=""{Binding Source={StaticResource UnionAllSerieViewSource}}""
ColumnWidth="*" Background="#CCCCCC">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="{lex:Loc time}" SortDirection="Descending"
Binding="{Binding X, Converter={StaticResource OleDateToDateTimeConverter}, StringFormat=\{0:dd/MM/yy HH:mm\}}" />
<DataGridTextColumn Header="{lex:Loc Measure}"
Binding="{Binding Y}" />
</DataGrid.Columns>
</DataGrid>
有关如何对 CollectionViewSources 进行排序的详细信息,请参阅 this msdn article。
我有一个 TabControl
,其中一个 TabItem
里面有一个 DataGrid
。
<TabControl Background="{DynamicResource StandardBackgroundColor}"
Grid.Row="2" Grid.Column="1"
BorderBrush="{DynamicResource StandardBorderColor}"
DataContext="{Binding ChartViewModel}">
<TabItem Header="{lex:Loc Data}">
<DataGrid Name="TagGrid" ItemsSource="{Binding UnionAllSerie}"
ColumnWidth="*" Background="#CCCCCC">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="{lex:Loc time}" SortDirection="Descending"
Binding="{Binding X, Converter={StaticResource OleDateToDateTimeConverter}, StringFormat=\{0:dd/MM/yy HH:mm\}}" />
<DataGridTextColumn Header="{lex:Loc Measure}"
Binding="{Binding Y}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
我的 UnionAllSerie 声明如下:
public ObservableCollection<Data> UnionAllSerie { get; set; } = new ObservableCollection<Data>();
根据对 window 执行的操作填充此数据集合。我想要的是让 Grid
按代表日期的第二列自动排序。
有人知道我做错了什么或遗漏了什么吗? 谢谢!
在 Datagrid 列上设置 SortDirection 实际上不会对该列进行排序。 (详见 here)。
我建议使用 CollectionViewSource,它具有适合您的目的的内置功能。 结果应如下所示:
<Window.Resources>
<CollectionViewSource x:Key="UnionAllSerieViewSource" Source="{Binding UnionAllSerie}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="X" Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
...
<DataGrid Name="TagGrid" ItemsSource=""{Binding Source={StaticResource UnionAllSerieViewSource}}""
ColumnWidth="*" Background="#CCCCCC">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="{lex:Loc time}" SortDirection="Descending"
Binding="{Binding X, Converter={StaticResource OleDateToDateTimeConverter}, StringFormat=\{0:dd/MM/yy HH:mm\}}" />
<DataGridTextColumn Header="{lex:Loc Measure}"
Binding="{Binding Y}" />
</DataGrid.Columns>
</DataGrid>
有关如何对 CollectionViewSources 进行排序的详细信息,请参阅 this msdn article。