2016-09-20 7 views
2

Ich habe eine TabControl, die eine TabItem mit einer DataGrid innerhalb hat.DataGrid-Sortierung funktioniert nicht

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

Wo ist mein UnionAllSerie wie folgt erklärt:

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

Diese Sammlung von Daten gefüllt wird in Abhängigkeit von der Aktion auf dem Fenster ausgeführt. Was ich will, ist die Grid automatisch sortiert nach der zweiten Spalte, die das Datum darstellt.

Weiß jemand, was ich falsch mache oder nicht? Danke!

Antwort

1

Durch das Festlegen der SortDirection für eine Datagrid-Spalte wird die Spalte nicht sortiert. (Details siehe here).

Ich würde empfehlen, eine CollectionViewSource zu verwenden, die eingebaute Funktionalität für Ihren Zweck hat. Das Ergebnis sollte in etwa so aussehen:

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

Weitere Informationen darüber, wie CollectionViewSources this msdn article sehen zu sortieren.

+0

Perfekt! Es funktioniert wie gewünscht! Danke für die Artikel. –

+0

Ich bin froh, dass ich helfen konnte :) Da es Ihr Problem gelöst hat, würden Sie in Betracht ziehen, diese Antwort zu akzeptieren? – vkluge

Verwandte Themen