TailBlazer.Views.Searching.SearchCollection.SearchCollection C# (CSharp) Method

SearchCollection() public method

public SearchCollection ( ISearchInfoCollection searchInfoCollection, ISchedulerProvider schedulerProvider ) : System
searchInfoCollection ISearchInfoCollection
schedulerProvider ISchedulerProvider
return System
        public SearchCollection(ISearchInfoCollection searchInfoCollection, ISchedulerProvider schedulerProvider)
        {
            _viewModels = searchInfoCollection.Searches.Connect()
                .Transform(tail => new SearchViewModel(tail, vm =>
                {
                    searchInfoCollection.Remove(vm.Text);
                }))
                .DisposeMany()
                .AsObservableCache();

            var shared = _viewModels.Connect();//.Publish();

            var binderLoader = shared
                .Sort(SortExpressionComparer<SearchViewModel>
                               .Ascending(tvm => tvm.SearchType== SearchType.All ? 1:2)
                               .ThenByAscending(tvm => tvm.Text))
                .ObserveOn(schedulerProvider.MainThread)
                .Bind(out _items)
                .Subscribe();

            var autoSelector = shared.WhereReasonsAre(ChangeReason.Add)
                .Flatten()
                .Select(change => change.Current)
                .Subscribe(latest => Selected = latest);

            var removed = shared.WhereReasonsAre(ChangeReason.Remove)
                .Subscribe(_ => Selected = _viewModels.Items.First());

            var counter = shared.ToCollection()
                .Subscribe(count => Count = count.Count);

            var nullDodger = this.WhenValueChanged(sc => sc.Selected)
                .Where(x => x == null)
                .Subscribe(x => Selected =_viewModels.Items.First());

               Latest = this.WhenValueChanged(sc => sc.Selected)
                .Where(x=>x!=null)
                .Select(svm => svm.Latest)
                .Switch()
                .Replay(1).RefCount();

            _cleanUp = new CompositeDisposable(_viewModels, binderLoader, counter, removed, autoSelector, nullDodger);
        }