/// <summary> /// Refreshes the view model. /// </summary> /// <returns>A task tracking the operation.</returns> public override Task Refresh() { subscription?.Dispose(); var dispose = new CompositeDisposable(); var itemSource = CreateItemSource(); var items = new VirtualizingList <IIssueListItemViewModelBase>(itemSource, null); var view = new VirtualizingListCollectionView <IIssueListItemViewModelBase>(items); view.Filter = FilterItem; Items = items; ItemsView = view; dispose.Add(itemSource); dispose.Add( Observable.CombineLatest( itemSource.WhenAnyValue(x => x.IsLoading), view.WhenAnyValue(x => x.Count), this.WhenAnyValue(x => x.SearchQuery), this.WhenAnyValue(x => x.SelectedState), this.WhenAnyValue(x => x.AuthorFilter.Selected), (loading, count, _, __, ___) => Tuple.Create(loading, count)) .Subscribe(x => UpdateState(x.Item1, x.Item2))); subscription = dispose; return(Task.CompletedTask); }
/// <summary> /// Refreshes the view model. /// </summary> /// <returns>A task tracking the operation.</returns> public override Task Refresh() { if (RemoteRepository == null) { // If an exception occurred reading the parent repository, do nothing. return(Task.CompletedTask); } subscription?.Dispose(); var dispose = new CompositeDisposable(); var itemSource = CreateItemSource(); var items = new VirtualizingList <IIssueListItemViewModelBase>(itemSource, null); var view = new VirtualizingListCollectionView <IIssueListItemViewModelBase>(items); view.Filter = FilterItem; Items = items; ItemsView = view; Error = null; dispose.Add(itemSource); dispose.Add( Observable.CombineLatest( itemSource.WhenAnyValue(x => x.IsLoading), view.WhenAnyValue(x => x.Count), this.WhenAnyValue(x => x.SearchQuery), this.WhenAnyValue(x => x.SelectedState), this.WhenAnyValue(x => x.AuthorFilter.Selected), (loading, count, _, __, ___) => Tuple.Create(loading, count)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => UpdateState(x.Item1, x.Item2))); dispose.Add( Observable.FromEventPattern <ErrorEventArgs>( x => items.InitializationError += x, x => items.InitializationError -= x) .Subscribe(x => Error = x.EventArgs.GetException())); subscription = dispose; return(Task.CompletedTask); }