ReactiveCommand取决于彼此的两个命令

时间:2017-06-15 07:30:55

标签: c# reactiveui

作为Shane Neuville的反应,我正在改变我的问题。但是,是的。它可能比我原先想象的要复杂得多。

我有一个ReactiveList<ServiceEntryModel> Services;将在视图出现时填充。对于列表中的每个条目,我使用了名为Services.ItemsAdded.Subscribe()的函数,其中RxCell将填充整个列表末尾应以特定方式排序的数据。截至目前,我有两个独立的ReactiveCommands。

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

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

当从Services.ItemsAdded.Subscribe方法填充整个列表时,应调用第二个命令。如何查看/知道每个条目何时完成?

我尝试了一些带有计数器和ObservablePropertyHelpers的东西,但到目前为止没有运气。

这是我应该相关的ViewModel部分

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

评论的部分是一个无限循环,因为将继续调用Services.ItemsAdded。

用户可以拉到刷新状态,然后再次调用第一个命令,这样就完成了。秒应该再次排序整个列表。

1 个答案:

答案 0 :(得分:0)

这够了吗?

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

或InvokeCommand语法

RefreshServices
    .InvokeCommand(OrderServices);

与InvokeCommand OrderServices的区别是,如果它已经在执行,那么它可能不适合您的用例。例如,当OrderServices仍在运行时,RefreshServices可以再次执行。