2010-05-23 43 views
1

我想要做自定義在具有數據表作爲的ItemsSource一個ListView排序:WPF BindingListCollectionView到的ListCollectionView的數據表作爲的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 「

有沒有人有解決方案? Thx 4 answers

回答

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

相關問題