/// <summary> /// Aggregates observables from <paramref name="collection"/> using selector for observables <paramref name="observablePropertySelector"/> /// and aggregator for values from observables <paramref name="aggregator"/> /// </summary> public static IObservable <TRes> AggregateLatest <T, TRes>( this ReadOnlyObservableCollection <T> collection, Func <T, IObservable <TRes> > observablePropertySelector, Func <IList <TRes>, TRes> aggregator) { return(Observable.Create <TRes>(observer => { var aggregateLatestSubscription = collection.AggregateLatest(observablePropertySelector, aggregator, observer); var collectionChangesSubscription = collection.ObserveCollectionChanges().Subscribe(_ => { aggregateLatestSubscription.Dispose(); aggregateLatestSubscription = collection.AggregateLatest(observablePropertySelector, aggregator, observer); }); return Disposable.Create(() => { collectionChangesSubscription.Dispose(); aggregateLatestSubscription.Dispose(); }); })); }