Здравствуйте, Spirit_1, Вы писали:
S_>то видно, что при байндинге в event NotifyCollectionChangedEventHandler вызывается add к методу из ListCollectionView. При установке DataContext ListBox или окна в null или другой объект или очистке байндинга у ListBox.ItemsSource remove никогда не вызывается. Как же тогда отцепить коллекцию, реализующую INotifyCollectionChanged от ListBox ?
Контролы WPF взаимодействуют с коллекцией не напрямую, а используя внутренний механизм CollectionView, которым манипулируют достаточно хитрожопо (пардон). Скорее всего именно из-за этого связь с коллекцией все еще остается, в то время, как в контроле ссылки уже нет.
Варианты решения:
Использовать ObservableCollection только для UI, а в потоке манипулировать обычным списком. Перед показом окна, перекладываем список в коллекцию. После показа окна, делаем наоборот.
Модифицировать коллекцию через Dispatcher.
Перейти на .Net Framework 4.5, в которой обещали разрешить модификацию коллекций в не UI-потоках.