2

ItemsSource として DataTable を持つ ListView でカスタム並べ替えを行いたい:

myListView.ItemsSource = (data as DataTable);

そして、これは私の並べ替え関数の最初の行です:

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

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

2 行目は、次のような execption をスローします。

「System.Windows.Data.BindingListCollectionView」を「System.Windows.Data.ListCollectionView」にキャストできません

誰にも解決策はありますか?Thx 4つの答え

4

1 に答える 1

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);

1つのビューのみが必要な場合。

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

于 2010-05-28T04:31:32.503 に答える