我想在ListView上进行自定义排序,它有一个DataTable作为ItemsSource:
myListView.ItemsSource = (data as DataTable);
这是我的排序功能的第一行:
DataView view = (myListView.ItemsSource as DataTable).DefaultView;
ListCollectionView coll = (ListCollectionView)CollectionViewSource.GetDefaultView(view);
第二行抛出一个像:
这样的执行无法将“System.Windows.Data.BindingListCollectionView”强制转换为“System.Windows.Data.ListCollectionView”
有没有人有解决方案?答案4答案
答案 0 :(得分:5)
它返回一个不是ListCollectionView的ICollectionView。您最有可能希望视图顶部的视图能够获得ListCollectionView具有的功能。由于ICollectionView实现了CollectionChanged,因此您不希望使用BindingListCollectionView。
DataView view = (myListView.ItemsSource as DataTable).DefaultView;
ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(view));
虽然可以选择:
DataView view = (myListView.ItemsSource as DataTable).DefaultView;
BindingListCollectionView coll = new BindingListCollectionView(view);
如果您只想要一个视图。
如果直接绑定到WPF控件,最好直接绑定到它而不创建BindingListCollectionView / ListCollectionView,因为DefaultView已经允许对DataTable进行排序。
Binding binding = new Binding() { Source = (myListView.ItemsSource as DataTable) };
this.myListView.SetBinding(myListView.ItemsSourceProperty, binding);
DataView view = (myListView.ItemsSource as DataTable).DefaultView;
view.Sort = "Age";
希望有帮助,
TamusJRoyce