コード例 #1
0
        /// <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);
        }