EnumerableCollectionView到具有DataGrids的ListCollectionView

Jas*_*ins 5 c# sorting wpf datagrid collectionview

我有一个要尝试实现CustomSort的DataGrid。DataGrid ItemsSource始终返回的EnumerableCollectionView类型是不可排序的。我试图将EnumerableCollectionView转换为ListCollectionView,以便可以在其上实现CustomSort方法。基础集合是ObservableDictionary。如何将EnumerableCollectionView转换为ListCollectionView或从ItemsSource返回ListCollectionView?

Jas*_*ins 2

最终我自己解决了这个问题。我创建了一个新列表,其中包含所有 DataGridRows,然后根据我的 DataGridRows 列表创建一个新的 ListCollectionView。然后,我根据新列表执行自定义排序,并将 DataGrid 的 ItemsSource 设置为 ListCollectionView。

private void PerformCustomSort(DataGridColumn column) {
        ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;
        column.SortDirection = direction;

        List<DataGridRow> dgRows = new List<DataGridRow>();
        var itemsSource = dataGrid1.ItemsSource as IEnumerable;

        foreach (var item in itemsSource) {
            DataGridRow row = dataGrid1.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
            if (null != row) {
                dgRows.Add(row);
            }
        }

        ListCollectionView lcv = new ListCollectionView(dgRows);
        SortOrders mySort = new SortOrders(direction, column);
        lcv.CustomSort = mySort;
        dataGrid1.ItemsSource = lcv;
    }
Run Code Online (Sandbox Code Playgroud)

这使我能够避免使用 EnumerableCollectionView 并允许排序。