示例#1
0
        public override async Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
        {
            var value = request.Context[SubscribeToDataTrigger.DataContextKey];

            if (value != null)
            {
                return(value);
            }
            else if (request.Context[SubscribeToDataTrigger.ErrorContextKey] is Exception error)
            {
                throw error;
            }
            else
            {
                if (_subscription != null)
                {
                    _subscription.Dispose();
                }

                var data = await base.Load(ct, request);

                _subscription = _subscribeToData(data);

                return(data);
            }
        }
 /// <summary>
 /// Creates a new instance of <see cref="DataLoaderState"/>.
 /// </summary>
 /// <param name="request">The <see cref="IDataLoaderRequest"/>.</param>
 /// <returns>The <see cref="DataLoaderState"/>.</returns>
 public DataLoaderState WithRequest(IDataLoaderRequest request)
 {
     return(new DataLoaderState(this)
     {
         Request = request
     });
 }
        /// <inheritdoc />
        public override Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
        {
            return(Task.Run(InnerLoad));

            Task <object> InnerLoad()
            {
                return(base.Load(ct, request));
            }
        }
示例#4
0
        public override async Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
        {
            var result = await base.Load(ct, request);

            if (_data != null)
            {
                _onPreviousDataLost(_data);
            }
            _data = result;

            return(result);
        }
示例#5
0
        public override async Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
        {
            var result = await base.Load(ct, request);

            // We should not dispose the previous data if we load the same instance.
            if (_data != null && !ReferenceEquals(_data, result))
            {
                _onPreviousDataLost(_data);
            }
            _data = result;

            return(result);
        }
        public override async Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
        {
            try
            {
                var result = await base.Load(ct, request);

                await _onSuccess(ct, request, result);

                return(result);
            }
            catch (Exception error)
            {
                await _onError(ct, request, error);

                throw;
            }
        }
 /// <inheritdoc/>
 public Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
 {
     return(_dataLoaderDelegate(ct, request));
 }
示例#8
0
        private async Task <ReadOnlyObservableCollection <ChuckNorrisItemViewModel> > LoadQuotes(CancellationToken ct, IDataLoaderRequest request)
        {
            var quotes = await this.GetService <IChuckNorrisService>().GetFavorites(ct);

            // This is an observable list that will dynamically remove items when we unfavorite. We could use 'quotes.Items' if we don't want the list to remove items directly.
            quotes
            .Connect()
            .Transform(q => this.GetChild(() => new ChuckNorrisItemViewModel(this, q), q.Id))
            .ObserveOn(this.GetService <IDispatcherScheduler>())
            .Bind(out var list)
            .DisposeMany()
            .Subscribe()
            .DisposeWithNextLoad(request);

            return(list);
        }
 /// <inheritdoc cref="IDataLoaderStrategy.Load(CancellationToken, IDataLoaderRequest)"/>
 public virtual Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
 {
     return(InnerStrategy.Load(ct, request));
 }
 /// <summary>
 /// Adds this <paramref name="disposable"/> to the <see cref="IDataLoaderRequest"/>'s <see cref="SequenceDisposableGroup"/>.
 /// </summary>
 /// <param name="disposable">The disposable to add.</param>
 /// <param name="request">The request that generated the <paramref name="disposable"/>.</param>
 /// <returns>The original <paramref name="disposable"/>.</returns>
 public static IDisposable DisposeWithNextLoad(this IDisposable disposable, IDataLoaderRequest request)
 {
     request.AddToSequenceDisposableGroup(disposable);
     return(disposable);
 }
        /// <summary>
        /// Adds a <paramref name="disposable"/> to this <paramref name="request"/>'s <see cref="SequenceDisposableGroup"/>.
        /// </summary>
        /// <param name="request">The request that generated the <paramref name="disposable"/>.</param>
        /// <param name="disposable">The disposable to add.</param>
        public static void AddToSequenceDisposableGroup(this IDataLoaderRequest request, IDisposable disposable)
        {
            var contextLifetime = request.Context.GetSequenceDisposableGroup();

            contextLifetime.AddOrClear(request.SequenceId, disposable);
        }
 public override async Task <object> Load(CancellationToken ct, IDataLoaderRequest request)
 {
     return(await _innerFunc());
 }