2016-09-20 2 views
2

J'ai un TabControl qui a un TabItem avec un DataGrid à l'intérieur.Le tri DataGrid ne fonctionne pas

<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> 

Où mon UnionAllSerie est déclarée comme suit:

public ObservableCollection<Data> UnionAllSerie { get; set; } = new ObservableCollection<Data>(); 

Cette collecte de données est peuplée en fonction de l'action effectuée sur la fenêtre. Ce que je veux, c'est que le Grid soit automatiquement trié par la deuxième colonne, qui représente la date.

Est-ce que quelqu'un sait ce que je fais mal ou manquant? Merci!

Répondre

1

La définition de SortDirection sur une colonne Datagrid ne permet pas de trier la colonne. (Voir here pour les détails).

Je recommanderais d'utiliser une CollectionViewSource qui a des fonctionnalités intégrées pour votre usage. Le résultat devrait ressembler à ceci:

<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> 

Pour plus d'informations sur la façon de trier CollectionViewSources voir this msdn article.

+0

Parfait! Cela fonctionne comme voulu! Merci pour les articles. –

+0

Je suis content que je puisse vous aider :) Comme il a résolu votre problème accepteriez-vous d'accepter cette réponse? – vkluge