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)); } }
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); }
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)); }
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()); }