Делаю свой контрол, наследник от ItemsControl. На который будут биндить коллекции данных.
Предположим хочу реализовать свой малтиселекшен. Это значит что у меня будет
protected override DependencyObject GetContainerForItemOverride
возвращать какой то контейнер мой, у которого делаю DependencyProperty IsSelected.
Одновременно у контрола-наследника от ItemsControl веду коллекцию Selection. Т.о. IsSelected и Selection жестко связаны.
И вот беда, я не могу понять как отработать удаления айтема, чтобы скорректировать Selection. Потому что если айтема нет то и в селекнутых его не должно.
Сделал костыль, в
protected override void OnVisualParentChanged(DependencyObject oldParent)
сбрасываю IsSelected и этим корректирую Selection. Но вот беда, при вызове Move он тоже срабатывает. А от Move селекшен точно не должен сбрасыватся. Это критично.
Пробовал ItemContainerGenerator.ItemsChanged обрабатывать, там можно отличить удаление от перемещения. Но в аргументах кроме какой то странной Position ничего нет.
Какой то бедлам соглашений с нотификацией изменения коллекций. Ну есть же уже INotifyCollectionChanged, нет же они придумали еще какой то способ причем там инфа ни вся.
Умом понимаю что ItemsControl надо юзать, но с другой стороны что ни маленькая проблема то через какую то задницу решение.