2016-09-20 130 views
2

我有一个TabControl有一个TabItemDataGrid里面。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>(); 

数据的集合取决于在窗口上执行的操作填充。我想要的是Grid自动按表示日期的第二列进行排序。

有人知道我在做什么错误或失踪? 谢谢!

回答

1

在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更多信息。

+0

完美!它按要求工作!感谢您的文章。 –

+0

我很高兴我可以帮助:)因为它解决了你的问题,你会考虑接受这个答案吗? – vkluge