/// <inheritdoc /> public IObservable <IChangeSet <T> > Connect(Func <T, bool> predicate = null) { var observable = Observable.Create <IChangeSet <T> >(observer => { lock (_locker) { var initial = new ChangeSet <T>(new[] { new Change <T>(ListChangeReason.AddRange, _readerWriter.Items) }); if (initial.TotalChanges > 0) { observer.OnNext(initial); } var source = _changes.Finally(observer.OnCompleted); return(source.SubscribeSafe(observer)); } }); if (predicate != null) { observable = new FilterStatic <T>(observable, predicate).Run(); } return(observable); }
/// <inheritdoc /> public IObservable <IChangeSet <T> > Preview(Func <T, bool> predicate = null) { IObservable <IChangeSet <T> > observable = _changesPreview; if (predicate != null) { observable = new FilterStatic <T>(observable, predicate).Run(); } return(observable); }