2010-05-23 13 views
1

que je veux faire le tri personnalisé sur un ListView qui a un DataTable comme ItemsSource:WPF BindingListCollectionView à ListCollectionView pour DataTable comme ItemsSource

myListView.ItemsSource = (data as DataTable); 

Ce sont les premières lignes de ma fonction de tri:

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

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

La deuxième ligne renvoie une Execption comme:

Impossible de lancer « System.Windows.Data.BindingListCollectionView » à « System.Windows.Data.ListCollectionView "

Quelqu'un at-il une solution? Thx 4 réponses

Répondre

5

Il retourne un ICollectionView qui n'est pas un ListCollectionView. Vous avez très probablement besoin d'une vue en haut d'une vue pour obtenir les fonctionnalités de ListCollectionView. Et puisque ICollectionView implémente CollectionChanged, vous ne voudriez pas utiliser BindingListCollectionView.

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

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

Bien qu'une alternative serait:

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

BindingListCollectionView coll = new BindingListCollectionView(view); 

Si vous ne vouliez qu'une seule vue.

Si vous vous liez directement à un contrôle WPF, il est préférable de lier directement sans effectuer de BindingListCollectionView/ListCollectionView, car DefaultView autorise déjà le tri du 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"; 

Si tout va bien utiles,

TamusJRoyce