DataGrid追加另一列排序

时间:2016-08-04 08:36:39

标签: wpf

我有一个WPF项目 - 一个包含四列的数据网格:ColumnOne,ColumnTwo,columnThree,ColumnFour。当用户按ColumnOne或ColumnTwo排序时,后面的代码也可能通过ColumnThree添加排序,因此它会像SortBy(“ColumnOne”)一样排序。然后是(“ColumnThree”)。如果这很重要,我的DataGrid的ItemsSource是PagedCollectionView,它支持SortDescriptors。

1 个答案:

答案 0 :(得分:1)

您必须在此简单示例中覆盖DataGrid.OnSorting(但请扩展完整要求)并使用自定义控制而不是XAML中的标准DataGrid

public class MyDataGrid : DataGrid
    {
        protected override void OnSorting(DataGridSortingEventArgs eventArgs)
        {
            base.OnSorting(eventArgs);
            var test = eventArgs.Column;
            if (test.Header.ToString() == "ColumnOne" && test.SortDirection.HasValue
                && test.SortDirection.Value.Equals(ListSortDirection.Ascending)
                )
            {
                ICollectionView view = CollectionViewSource.GetDefaultView(this.ItemsSource);
                view.SortDescriptions.Add(new SortDescription("ColumnThree", ListSortDirection.Ascending));
                view.Refresh();

                this.Columns[2].SortDirection = ListSortDirection.Ascending;
            }
        }
    }

以上代码只处理SortDirection的收集排序和ColumnThree属性设置,只有一种情况:当用户按ColumnOne升序时。