Example #1
0
        /// <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();
                });
            }));
        }