WPF BindingListCollectionView для ListCollectionView для DataTable как ItemsSource - PullRequest
1 голос
/ 23 мая 2010

Я хочу выполнить пользовательскую сортировку для ListView, который имеет DataTable как 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 ответа

1 Ответ

5 голосов
/ 28 мая 2010

Возвращает 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";

Надеюсь, полезно,

TamusJRoyce

...