WPF BindingListCollectionView将DataTable的ListCollectionView作为ItemsSource

Mar*_*rco 1 datatable itemssource listcollectionview

我想在ListView上进行自定义排序,它将DataTable作为ItemsSource:

myListView.ItemsSource = (data as DataTable);
Run Code Online (Sandbox Code Playgroud)

这是我的排序功能的第一行:

DataView view = (myListView.ItemsSource as DataTable).DefaultView;

ListCollectionView coll = (ListCollectionView)CollectionViewSource.GetDefaultView(view);
Run Code Online (Sandbox Code Playgroud)

第二行抛出一个如下的执行:

无法将"System.Windows.Data.BindingListCollectionView"强制转换为"System.Windows.Data.ListCollectionView"

有人有解决方案吗?这4个答案

Tam*_*yce 5

它返回一个不是ListCollectionView的ICollectionView.您最有可能希望视图顶部的视图能够获得ListCollectionView具有的功能.由于ICollectionView实现了CollectionChanged,因此您不希望使用BindingListCollectionView.

DataView view = (myListView.ItemsSource as DataTable).DefaultView;

ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(view));
Run Code Online (Sandbox Code Playgroud)

虽然替代方案是:

DataView view = (myListView.ItemsSource as DataTable).DefaultView;

BindingListCollectionView coll = new BindingListCollectionView(view);
Run Code Online (Sandbox Code Playgroud)

如果您只想要一个视图.

如果直接绑定到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";
Run Code Online (Sandbox Code Playgroud)

希望有帮助,

TamusJRoyce