Pull to refresh
0
0
Send message
Использование такого рода подписок на PropertyChanged, а так же на CollectionChanged чревато утечками памяти. Особенно в тех случаях, когда вью модели создаются динамически. Гораздо лучше использовать мессенжеры для обмена данными между вьюмоделями, или слабо связанные события. Мессенжер чем еще хорош, что позволяет практически полностью устранить связанность между вью моделями.
А использование асинхронного мессенжера позволит отложить перестройку вьюх, если это необходимо, до более подходящего момента.

Кроме того, вместо источников данных в виде ObservableCollection лучше использовать связку List и ICollectionView. Тогда при изменении данных вьюха не будет перестраиваться при каждом чихе, а будет лишь тогда, когда будет вызван Refresh() для ICollectionView.
Но в данном примере это не обязательно, так как динамических данных нет, все статично.
1) Для варианта wpf/mvvm — Messenger. Входит в состав большинства mvvm библиотек.
2) Вообще для всех вариантов — Observable и ReactiveExtension. www.introtorx.com/content/v1.0.10621.0/00_Foreword.html
Основная бизнес логика может выполнять в отдельном потоке. Уведомления от текущем состоянии, о завершении — могут выполняться в UI-потоке.
Пример:
GetChildren()
  .ToObservable()
  .Select(ReCreateElement)
  .SubscribeOn(NewThreadScheduler.Default)
  .ObserveOn(SynchronizationContext.Current)
  .Subscribe(shaft => { }, OnCompleted, _tokenSource.Token);
2

Information

Rating
Does not participate
Registered
Activity