私はXamarin.FormsとReactiveUIで作られたアプリケーションを持っています。 Pictureこのアプリでは、一種のドロップダウン(実際には、ユーザーが1つのオプションをフィルタリングして選択できる別のビューを押すボタン)があり、この「ドロップダウン」が変更されたときに、値。ReactiveCommand.CreateFromTask最初の実行を遅らせる方法
この「ドロップダウン」は何らかの値で開始せず、非同期要求を行い、値を取得してビューを更新する必要があります。私は文書をロードするためのコマンドを作成していたときに
問題は、次のとおりです。
LoadAllDocuments = ReactiveCommand.CreateFromTask<string, IEnumerable<Document>>(_ => m_service.GetAllDocumentsByTodoListAsync(SelectedTodoList.Id), canLoadAll, m_scheduler);
私はSelectedToDoListからIDを必要とするが、これは、この時点ではnullになります。
コマンドのこの最初の実行を遅延させる方法はありますか?あるいはこれを解決するためのより良いワークフローがありますか?
ここで私は今どのようにそれをやっているのですか?さらに情報が必要な場合は教えてください。
LoadAllDocuments = ReactiveCommand.CreateFromTask<string, IEnumerable<Document>>(_ => m_service.GetAllDocumentsByTodoListAsync(SelectedTodoList.Id), canLoadAll, m_scheduler);
ChangeToDoListCommand = ReactiveCommand.CreateFromTask<DocumentListViewModel, bool>(vm => this.PushPageFromCacheAsync<ToDoListViewModel>((model) => model.ParentViewModel = this));
this.WhenActivated((CompositeDisposable disposables) =>
{
SelectedItem = null;
var SelectedTodoListChanged =
this
.WhenAnyValue(x => x.SelectedTodoList)
.Throttle(TimeSpan.FromSeconds(1), RxApp.MainThreadScheduler)
.Publish();
SelectedTodoListChanged
.Where(x => x == null)
.Subscribe(async _ => SelectedTodoList = await viewService.GetMyToDoListByVaultAsync(RuntimeContext.Current.VaultId))
.DisposeWith(disposables);
SelectedTodoListChanged
.Where(x => x != null)
.InvokeCommand(LoadAllDocuments)
.DisposeWith(disposables);
SelectedTodoListChanged.Connect();
LoadAllDocuments
.ObserveOn(m_scheduler)
.SubscribeOn(m_scheduler)
.Subscribe(list => AddViewsToList(list.ToList()))
.DisposeWith(disposables);
私はCreateFromTaskを実行したときにコマンドがすぐに呼び出されると誤解しましたが、私はそれを望んでいませんでした。しかし、本当に起こったことは、コマンドがあなたがそれらを呼び出すユニットを実行しないので、私はそれを呼び出す別の場所を持っていたということでした。あなたの答えはこの問題を見つけるのを助け、canLoadAllDocumentsでコードを改善しました。 – Giusepe