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

最佳答案

最终自己解决了这个问题。我创建了一个包含所有DataGridRows的新列表,然后根据我的DataGridRows列表创建了一个新的ListCollectionView。然后,我基于新的List进行了自定义排序,并将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;
    }

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

关于c# - EnumerableCollectionView到具有DataGrids的ListCollectionView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12410865/

10-11 10:55