... элементы управления списком должны каким-то образом это делать.
Я могу привести SourceCollection к INotifyCollectionChanged и добавить туда событие, но это
кажется излишне грязным.
На самом деле, именно так и поступают элементы управления списком. Это из исходного кода ItemsControl (найден через http://www.dotnetframework.org/):
((INotifyCollectionChanged)_items).CollectionChanged += new NotifyCollectionChangedEventHandler(OnItemCollectionChanged);
Возможно, вы должны представить свои CollectionViews как интерфейс, ICollectionView , который сам наследует INotifyCollectionChanged, а также предоставляет свойства CollectionView, такие как CurrentItem.