2016-09-20 2 views
2

У меня есть TabControl, который имеет один TabItem с DataGrid внутри.Сортировка 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

Настройка SortDirection в столбце Datagrid фактически не сортирует столбец. (см. 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

Смежные вопросы