2017-06-15 1 views
0

Als Reaktion von Shane Neuville ändere ich meine Frage. Aber ja. Es mag komplizierter sein, als ich es zuerst dachte.ReactiveCommand abhängig zwei Befehle aufeinander

Ich habe eine ReactiveList<ServiceEntryModel> Services;, die ausgefüllt wird, wenn die Ansicht angezeigt wurde. Mit jedem Eintrag in der Liste habe ich die Funktion Services.ItemsAdded.Subscribe() verwendet, in der die RxCell mit Daten gefüllt wird, die am Ende der gesamten Liste auf eine bestimmte Weise geordnet werden sollen. Ab sofort habe ich zwei separate ReactiveCommands.

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

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

Der zweite Befehl soll, wenn die ganze Liste aufgerufen werden, aus dem Services.ItemsAdded.Subscribe Verfahren aufgefüllt wird. Wie kann ich überprüfen, wann alle Eingaben gemacht wurden?

Ich habe etwas mit Zählern und ObservablePropertyHelper versucht, aber bisher ohne Glück.

Hier ist mein Viewmodel Teil,

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

Der Teil kommentiert wird relevant sein soll, ist eine Endlosschleife, weil die Services.ItemsAdded aufgerufen werden wird fortgesetzt.

Der Benutzer kann zum Aktualisieren ziehen und der erste Befehl wird erneut aufgerufen, also richtig, wenn das erledigt ist. Die Sekunden sollten die gesamte Liste neu ordnen.

+0

Ich folge immer noch nicht ganz. Wäre es möglich, eine kleine Auswahl dessen zu erstellen, was Sie erreichen möchten? Dazu "Wie kann ich prüfen/wissen wann jeder Eintrag fertig ist?" Ich würde dich das Gleiche fragen. Was sind die Indikatoren, die es getan hat? In welchem ​​Zustand gelangen die Daten dorthin, wo sie bekannt sind? Sie haben einen Zähler implementiert, kennen Sie also die Anzahl der Artikel? Wenn Sie nur die Liste sortieren möchten, dann ist https://docs.reactiveui.net/en/user-guide/lists/derived-lists.html eine bessere Lösung. –

Antwort

0

Ist das genug?

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

Oder die InvokeCommand Syntax

RefreshServices 
    .InvokeCommand(OrderServices); 

Die Unterscheidung mit InvokeCommand OrderServices wird nicht ausgeführt, wenn es bereits ist die Ausführung, die nicht Ihren Anwendungsfall passen könnte sein, dass. Beispielsweise können RefreshServices möglicherweise erneut ausgeführt werden, während OrderServices noch ausgeführt wird.

+0

Vielen Dank für Ihre Antwort. Wo soll ich das hinstellen? –

+0

InvokeCommand wurde für diese – MistyK

+0

entworfen Sie würden es einfach irgendwo platzieren, nachdem beide Befehle instanziiert wurden. Ich habe die InvokeCommand-Syntax hinzugefügt, aber ich denke, ich bin etwas neugierig auf Ihren Anwendungsfall. Wenn Order Services immer nur nach RefreshServices aufgerufen werden, warum sollte man "DoOrderService" nicht zu RefreshServices machen? Warum sollte es ein separater Befehl sein? Während OrderServices ausgeführt wird, kann der Benutzer einen anderen RefreshService ausgeben? Kann der Benutzer auf OrderService klicken, ohne RefreshService auszuführen? –

Verwandte Themen