2017-06-15 12 views
0

Shane Neuvilleからの反応として、私は私の質問を変えています。でも、はい。それは私が最初にそれと思ったより複雑かもしれません。ReactiveCommandはお互いに2つのコマンドに依存します

私はReactiveList<ServiceEntryModel> Services;を持っています。これは、ビューが現れたときに表示されます。リストのすべてのエントリで、私はServices.ItemsAdded.Subscribe()と呼ばれる関数を使用しました。ここで、RxCellには、リスト全体の最後に特定の順序で並べ替えるべきデータが入っています。現時点では、私は2つの別々のReactiveCommandsを持っています。

1.ReactiveCommand<Unit, List<ServiceEntryModel>> RefreshServices; 

2.ReactiveCommand<Unit, List<ServiceEntryModel>> OrderByCommand; 

2番目のコマンドは、リスト全体がServices.ItemsAdded.Subscribeメソッドから取り込まれるときに呼び出す必要があります。すべてのエントリが完了すると、どのように確認/知ることができますか?

私はカウンターとObservablePropertyHelpersで何か試しましたが、これまでのところ運がありません。

はここServices.ItemsAddedが呼ばれるように継続されますので、

Services.ItemsAdded.Subscribe(async entryItem => 
{ 
    ServiceEntityStatusDto serviceEntityStatus = await GetServiceEntryStatus(entryItem); 

    if (serviceEntityStatus != null) 
    { 
     entryItem.AvailabilityStatus = serviceEntityStatus.AvailabilityStatus; 
     entryItem.PerformanceStatus = serviceEntityStatus.PerformanceStatus; 
    } 
    counterServices++; 
    //await OrderServices.Execute(); //TODO infinite loop ? 
}); 

コメントしている部分が無限ループで、関連するべきである私のViewModel一部です。

ユーザーはプルダウンして最初のコマンドを再度呼び出すことができます。秒はリスト全体を再び注文するべきです。

+0

私はまだそれほどフォローしていません。あなたが達成しようとしているものの小さなサンプルを作成することは可能でしょうか?このためには、どのようにすべてのエントリが完了したかを確認する/知ることができますか?私はあなたに同じことを尋ねるでしょう。それが行われた指標は何ですか?データが完了したことを知っているところにデータが到達する状態は何か。あなたはカウンターを実装したので、アイテム数を知っていますか?あなたがしたいことがすべてリストを並べ替えるなら、https://docs.reactiveui.net/en/user-guide/lists/derived-lists.htmlがより良い解決策になるかもしれません。 –

答えて

0

これで十分ですか?

RefreshServices 
    .SelectMany(_ => OrderServices.Execute()) 
    .Subscribe(); 

またはInvokeCommand構文

RefreshServices 
    .InvokeCommand(OrderServices); 

すでにあなたのユースケースに適合していない可能性があります実行するかどうInvokeCommandのOrderServicesで実行されないだろうということで区別。たとえば、OrderServicesがまだ実行中のときにRefreshServicesを再度実行することができます。

+0

ありがとうございました。どこに置くべきですか? –

+0

InvokeCommandはこのために設計されました – MistyK

+0

両方のコマンドがインスタンス化された後はどこにでも置くことができます。私はInvokeCommand構文をインクルードしましたが、私はあなたのユースケースについて少し興味があると思います。 Order ServicesがRefreshServicesの後に常に呼び出される場合、単にDoOrderServiceをRefreshServicesの一部にしないのはなぜですか?なぜそれを別のコマンドにするのですか? OrderServicesが実行されている間、ユーザーは別のRefreshServiceを発行できますか? RefreshServiceを実行せずにOrderServiceをクリックできますか? –

関連する問題