WPF BindingListCollectionView将DataTable的ListCollectionView作为ItemsSource

时间:2010-05-23 01:15:32

标签: datatable itemssource listcollectionview

我想在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答案

1 个答案:

答案 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