Вы можете определить, когда текущий элемент был изменен путем наблюдения за событием вашего CollectionView. Следующий код работает для меня:
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"
Когда я изменяю выделение в ListBox, отображается окно сообщения.
Что касается фильтрации, сортировки и группировки, в соответствии с ответом Арона, они недоступны для просмотра на CompositeCollection. Но для записи здесь являются способами, вы можете обнаружить изменения для представлений, которые Поддерживает эти функции:
- Похоже, вы получите событие CollectionChanged при изменении фильтра, хотя я не могу найти это документированы.
- SortDescriptions - это SortDescriptionCollection, который является INotifyCollectionChanged, поэтому подключите обработчик событий CollectionChanged в свойстве SortDescriptions.
- GroupDescriptions -
ObservableCollection<GroupDescription>
, поэтому подключите обработчик события CollectionChanged в свойстве GroupDescriptions.
Проблема заключается в том, что я использую CompositeCollection, который связан с двумя различными объектами CollectionViewSource. Когда я изменил местоположение в ListBox (который IsSynchronizedWithCurrentItem, очевидно, установлен в True), CurrentChanging (ed) не запускается. – Shimmy
Итак, у вас есть два CVS над одной и той же коллекцией? Тупой вопрос, но вы уверены, что подписались на мероприятие по правильному CVS.View? Предложите вам обновить вопрос, чтобы показать код, который не работает. – itowlson
Возможно, вы скажете мне, как это сделать. Требуется отслеживание CurrentChanging. Вывод из всех моих попыток: событие не увольняется. это не глупый вопрос, я думаю, что это сложнее, чем есть; Мне жаль, что это не так. – Shimmy