WPF, ItemsControl, отработать удаление айтема.
От: barn_czn  
Дата: 19.09.18 20:46
Оценка:
Делаю свой контрол, наследник от 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 надо юзать, но с другой стороны что ни маленькая проблема то через какую то задницу решение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.