我有一个要在其上实现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/