我想在具有 DataTable 作为 ItemsSource 的 ListView 上进行自定义排序:
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 个答案
它返回一个 ICollectionView,而不是 ListCollectionView。您很可能需要视图之上的视图来获取 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";
希望有帮助,
塔姆斯·罗伊斯
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)