I have a TabControl that has one TabItemwith a DataGrid inside.
<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>
Where my UnionAllSerie is declared as follow:
public ObservableCollection<Data> UnionAllSerie { get; set; } = new ObservableCollection<Data>();
This collection of data is populated depending on the action performed on the window. What I want is to have the Grid automatically sorted by the second column, which represents the date.
Does anybody know what I am doing wrong or missing? Thanks!
Setting the SortDirection on a Datagrid column does not actually sort the column. (see here for details).
I would recommend using a CollectionViewSource which has build in functionality for your purpose. The result should look something like this:
<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>
For more information on how to sort CollectionViewSources see this msdn article.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With