2017-06-15 19 views
0

作爲來自Shane Neuville的反應,我改變了我的問題。但是,是的。這可能比我想象的要複雜得多。ReactiveCommand根據兩個命令彼此

我有一個ReactiveList<ServiceEntryModel> Services;當視圖出現時會被填充。對於列表中的每個條目,我都使用了名爲Services.ItemsAdded.Subscribe()的函數,其中RxCell將填充整個列表末尾應以特定方式排序的數據。截至目前,我有兩個單獨的ReactiveCommands。

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

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

從Services.ItemsAdded.Subscribe方法填充整個列表時應該調用第二個命令。我怎樣才能檢查/知道每個項目完成後?

我已經嘗試了一些與計數器和ObservablePropertyHelpers,但沒有任何運氣,迄今。

下面是應該是相關

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將繼續被稱爲我的視圖模型的一部分。

用戶可以拉動刷新,第一個命令將再次被調用,所以正確的時候完成。秒數應該重新排列整個列表。

+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之後總是被調用的,那麼爲什麼不直接在RefreshServices中創建「DoOrderService」呢?爲什麼使它成爲一個單獨的命令當OrderServices運行時,用戶可以發出另一個RefreshService?用戶是否可以單擊OrderService而不運行RefreshService? –