Пример #1
0
 private ReadOnlyThrottledView(TimeSpan bufferTime, IScheduler scheduler, IReadOnlyList <T> collection)
     : base(collection, true, true)
 {
     this.BufferTime          = bufferTime;
     this.refreshSubscription = ThrottledRefresher.Create(this, collection, bufferTime, scheduler, false)
                                .Subscribe(this.Refresh);
 }
Пример #2
0
 public ThrottledView(IObservableCollection <T> source, TimeSpan bufferTime, IScheduler scheduler)
     : base(source)
 {
     this.scheduler  = scheduler;
     this.bufferTime = bufferTime;
     this.refreshSubscription.Disposable = ThrottledRefresher.Create(this, source, bufferTime, scheduler, false)
                                           .Subscribe(this.Refresh);
 }
Пример #3
0
        internal static IObservable <IReadOnlyList <NotifyCollectionChangedEventArgs> > Create(
            IUpdater updater,
            IEnumerable source,
            TimeSpan bufferTime,
            IEnumerable <IObservable <object> > triggers,
            IScheduler scheduler,
            bool signalInitial)
        {
            var collectionChanges = ThrottledRefresher.Create(updater, source, bufferTime, scheduler, false);
            var triggersChanges   = triggers.Merge()
                                    .ThrottleOrDefault(bufferTime, scheduler)
                                    .Select(_ => ResetArgses);

            return(Observable.Merge(collectionChanges, triggersChanges)
                   .StartWithIf(signalInitial, scheduler, ResetArgses)
                   .ThrottleOrDefault(bufferTime, scheduler));
        }
Пример #4
0
        private MappingView(IEnumerable <TSource> source, IScheduler scheduler, IMappingFactory <TSource, TResult> factory, params IObservable <object>[] triggers)
        {
            Ensure.NotNull(source, nameof(source));
            Ensure.NotNull(source as INotifyCollectionChanged, "source");
            Ensure.NotNull(factory, nameof(factory));

            this.source  = source;
            this.factory = factory;
            this.mapped.AddRange(source.Select(this.GetOrCreateValue));
            this.updateSubscription.Add(ThrottledRefresher.Create(this, source, TimeSpan.Zero, scheduler, false)
                                        .ObserveOn(scheduler ?? Scheduler.Immediate)
                                        .Subscribe(this.OnSourceCollectionChanged));
            if (triggers != null && triggers.Any(t => t != null))
            {
                var triggerSubscription = triggers.Merge()
                                          .ObserveOn(scheduler ?? Scheduler.Immediate)
                                          .Subscribe(_ => this.Refresh());
                this.updateSubscription.Add(triggerSubscription);
            }

            this.SetSource(this.mapped);
        }
Пример #5
0
 public new void SetSource(IEnumerable <T> source)
 {
     base.SetSource(source);
     this.refreshSubscription.Disposable = ThrottledRefresher.Create(this, this.Source, TimeSpan.Zero, null, false)
                                           .Subscribe(this.Refresh);
 }
Пример #6
0
 public ReadOnlySerialView(IEnumerable <T> source)
     : base(source, true, true)
 {
     this.refreshSubscription.Disposable = ThrottledRefresher.Create(this, source, TimeSpan.Zero, null, false)
                                           .Subscribe(this.Refresh);
 }