Хорошо, провел тест:
1. на изменения в IEnumerable ItemsControl не реагирует, ожидаемо.
2. на событие PropertyChanged INotifyPropertyChanged-коллекции (не элементов) - тоже не реагирует, тут я ожидал другого поведения (выходит, что INPC работает только с биндингами и пересоздает визуальный компонент полностью).
3. с INotifyCollectionChanged все хорошо - у старых элементов анимация продолжается, но аргументы для события нужно детально описывать - закинуть null или неверные индексы не вышло.
4. если любую коллекцию переприсвоить в ItemsSource - то анимации слетают, несмотря на неизменность содержимого.
Т.е. ItemsControl хорошо работает ТОЛЬКО с INotifyCollectionChanged (что собственно можно увидеть тут), никакого внутреннего механизма сравнения ссылок там нет...
Вопрос, собственно, о том как проектировать слой данных без привязки к wpf. Выходит, что почти всегда придется писать врапперы в wpf-интерфейсе. Всякие Хранилище.Where(...) просто так в ItemsControl не закинуть, и простой INotifyPropertyChanged (на коллекцию) не поможет.
ok, я не понял про контекст (наверное как-то связано с ОС и тем как она управляет моим приложением), но нашел некий Nito.AsyncEx.AsyncContext, с ним действительно работает как нужно. Буду дальше читать.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
1. на изменения в IEnumerable ItemsControl не реагирует, ожидаемо.
2. на событие PropertyChanged INotifyPropertyChanged-коллекции (не элементов) - тоже не реагирует, тут я ожидал другого поведения (выходит, что INPC работает только с биндингами и пересоздает визуальный компонент полностью).
3. с INotifyCollectionChanged все хорошо - у старых элементов анимация продолжается, но аргументы для события нужно детально описывать - закинуть null или неверные индексы не вышло.
4. если любую коллекцию переприсвоить в ItemsSource - то анимации слетают, несмотря на неизменность содержимого.
Т.е. ItemsControl хорошо работает ТОЛЬКО с INotifyCollectionChanged (что собственно можно увидеть тут), никакого внутреннего механизма сравнения ссылок там нет...
Вопрос, собственно, о том как проектировать слой данных без привязки к wpf. Выходит, что почти всегда придется писать врапперы в wpf-интерфейсе. Всякие Хранилище.Where(...) просто так в ItemsControl не закинуть, и простой INotifyPropertyChanged (на коллекцию) не поможет.