2

我想对具有 DataTable 作为 ItemsSource 的 ListView 进行自定义排序:

myListView.ItemsSource = (data as DataTable);

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

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

ListCollectionView coll = (ListCollectionView)CollectionViewSource.GetDefaultView(view);

第二行抛出一个类似的execption:

无法将“System.Windows.Data.BindingListCollectionView”转换为“System.Windows.Data.ListCollectionView”

有没有人有解决方案?谢谢 4 个答案

4

1 回答 1

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";

希望有帮助,

塔姆斯·J·罗伊斯

于 2010-05-28T04:31:32.503 回答