public QueryHistoryProvider() { _historySourceList = new SourceList <RawQueryHistory>(); var counter = _historySourceList.CountChanged.Subscribe(i => IsEmpty = i == 0); var limiter = _historySourceList.LimitSizeTo(100).Subscribe(); _historySourceList.AddRange(LoadFileData()); var sharedList = _historySourceList .Connect() .DeferUntilLoaded() .Sort(SortExpressionComparer <RawQueryHistory> .Descending(t => t.LastRunAt)) .ObserveOnDispatcher() .Bind(out _queryHistories) .Subscribe(); var disposable = _queryHistories .ObserveCollectionChanges() .Throttle(TimeSpan.FromSeconds(2)) .Subscribe(pattern => { SaveFileData(_queryHistories); }); _compositeDisposable = new CompositeDisposable(counter, limiter, sharedList, disposable); }