首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CollectionViewSource进行ColumnHeader排序

使用CollectionViewSource进行ColumnHeader排序
EN

Stack Overflow用户
提问于 2015-06-17 21:30:03
回答 1查看 1.2K关注 0票数 3

我有一个DataGrid,它是绑定到集合视图源的数据。如果我将DataGrid绑定到一个列表,我可以通过单击列标题自动对DataGrid中的列进行排序。

如果绑定到CollectionViewSource,列标题仍然会像DataGrid排序时那样显示指示,但它不排序。我如何才能实现同样的功能?

这是我的DataGrid:

代码语言:javascript
复制
    <DataGrid Grid.Row="1" SelectedItem="{Binding SelectedItem}"
                  SelectionMode="Single" SelectionUnit="FullRow" AutoGenerateColumns="False" ItemsSource="{Binding CurrentErrorsViewSource.View}"
                  CanUserSortColumns="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" IsReadOnly="True">
            <DataGrid.Columns>
                <DataGridTemplateColumn CanUserResize="False">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ContentControl Template="{StaticResource ErrorRemoteControl}" Foreground="{StaticResource GlyphBrush}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Header="{userInterface:Translation Description}" Binding="{Binding Path=(viewModels:ErrorItemViewModel.ErrorInformation).Description}" Width="Auto" />
                <DataGridTextColumn Header="{userInterface:Translation Code}" Binding="{Binding Path=(viewModels:ErrorItemViewModel.ErrorCode)}" Width="Auto" />
            </DataGrid.Columns>
      </DataGrid>
EN

回答 1

Stack Overflow用户

发布于 2015-06-17 22:02:42

您可以处理DataGrid的Sorting事件,然后在代码隐藏中创建适当的SortDescription对象,并将它们添加到CollectionViewSource的SortDescriptions集合中。

代码语言:javascript
复制
void SortHandler(object sender, DataGridSortingEventArgs e)
{
    var collectionViewSource = (sender as DataGrid).ItemsSource as CollectionViewSource;

    var propertyName = e.Column.SortMemberPath;
    var sortDirection = ListSortDirection.Ascending;

    foreach (var sortDescription in collectionViewSource.SortDescriptions)
        if (sortDescription.PropertyName == propertyName &&
            sortDescription.Direction == ListSortDirection.Ascending)
        {
            sortDirection = ListSortDirection.Descending;
            break;
        }

    var sortDescription = new SortDescription()
    {
        PropertyName = propertyName,
        Direction = sortDirection
    };

    collectionViewSource.SortDescriptions.Clear();
    collectionViewSource.SortDescriptions.Add(sortDescription);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30893109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档