7

CompositeCollectionの現在の場所が変更されたときに通知を受け取る方法はありますか?

私はCompositeCollectionをCollectionViewで監視する必要があります。どんなアイデアでも歓迎します。

4

3 に答える 3

7

ICollectionView.CurrentChangedCollectionViewのイベントを監視することで、現在のアイテムがいつ変更されたかを検出できます。次のコードは私のために働きます:

CompositeCollection cc = new CompositeCollection();
cc.Add(new CollectionContainer { Collection = new string[] { "Oh No!", "Fie" } });
cc.Add(new CollectionContainer { Collection = new string[] { "Zounds", "Ods Bodikins" } });
CollectionViewSource cvs = new CollectionViewSource { Source = cc };

// Subscribing to CurrentChanged on the ICollectionView
cvs.View.CurrentChanged += (o, e) => MessageBox.Show("current changed");

lb.ItemsSource = cvs.View;  // lb is a ListBox with IsSynchronizedWithCurrentItem="True"

リストボックスの選択を変更すると、メッセージボックスが表示されます。

フィルタリング、並べ替え、およびグループ化に関しては、Aronの回答によると、これらはCompositeCollectionのビューでは使用できません。ただし、ここでの記録として、これらの機能をサポートするビューの変更を検出する方法を示します。

  • フィルタが変更されると、CollectionChangedイベントが発生するようですが、これについては文書化されていません。
  • SortDescriptionsはINotifyCollectionChangedであるSortDescriptionCollectionであるため、SortDescriptionsプロパティでCollectionChangedイベントハンドラーをフックします。
  • GroupDescriptionsはObservableCollection<GroupDescription>なので、GroupDescriptionsプロパティにCollectionChangedイベントハンドラーをフックします。
于 2010-01-17T01:00:52.587 に答える
0

複合コレクションで CollectionView を実行することはできません。こちらを参照してください

于 2010-01-17T01:42:49.823 に答える