WPF BindingListCollectionView为ListCollectionView DataTable作为ItemsSource [英] WPF BindingListCollectionView to ListCollectionView for DataTable as ItemsSource
问题描述
我想在ListView上进行自定义排序,它具有DataTable作为ItemsSource:
myListView.ItemsSource =(数据为DataTable);
这是我的排序功能的第一行:
DataView view =(myListView.ItemsSource as DataTable).DefaultView;
ListCollectionView coll =(ListCollectionView)CollectionViewSource.GetDefaultView(view);
第二行抛出一个执行,如:
无法将System.Windows.Data.BindingListCollectionView转换为System.Windows.Data.ListCollectionView
有人有解决方案吗? Thx 4答案
它返回不是ListCollectionView的ICollectionView。您最有可能希望在视图的顶部获取ViewCollectionView具有的功能。而且由于ICollectionView实现了CollectionChanged,所以你不想使用BindingListCollectionView。
DataView view =(myListView.ItemsSource as DataTable)。默认视图;
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
I want to do custom sorting on a ListView which has a DataTable as ItemsSource:
myListView.ItemsSource = (data as DataTable);
And this are the first lines of my sorting function:
DataView view = (myListView.ItemsSource as DataTable).DefaultView;
ListCollectionView coll = (ListCollectionView)CollectionViewSource.GetDefaultView(view);
The second line throws an execption like:
Unable to cast "System.Windows.Data.BindingListCollectionView" to "System.Windows.Data.ListCollectionView"
Has anyone a solution? Thx 4 answers
It returns an ICollectionView that is not a ListCollectionView. You most likely want a view on top of a view to get the features that ListCollectionView has. And since ICollectionView implements CollectionChanged, you wouldn't want to use BindingListCollectionView.
DataView view = (myListView.ItemsSource as DataTable).DefaultView;
ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(view));
Although an alternative would be:
DataView view = (myListView.ItemsSource as DataTable).DefaultView;
BindingListCollectionView coll = new BindingListCollectionView(view);
If you only wanted only one view.
If you are binding directly to a WPF control, it is best to bind directly to it without making a BindingListCollectionView/ListCollectionView, as DefaultView already allows sorting of the 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";
Hopefully Helpful,
TamusJRoyce
这篇关于WPF BindingListCollectionView为ListCollectionView DataTable作为ItemsSource的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!