2014-12-30 5 views
5

Ich frage mich, warum MVVM Licht fehlt Befehl mit Async-Ausführung? Ich glaube, es gibt viele Fälle, in denen dies nützlich sein könnte, also lassen Sie mich einen nennen.Async Befehl Ausführung in MVVM Licht

Nehmen wir an, dass unsere Benutzeroberfläche einen Container enthält, der mehrere Bildschirme enthält. Der Benutzer kann einen bestimmten Bildschirm oder einen Container mit mehreren Bildschirmen schließen. Angenommen, ein Benutzer hat einen Schließbefehl für den Container ausgegeben. Container im Gegenzug ruft auf jedem Bildschirm einen Schließbefehl auf und muss warten, bis der Bildschirm geschlossen wird. Dies kann in der Praxis die Validierung von Daten bedeuten. Speichern, usw. Aus diesem Grund müssen wir einen asynchronen Aufruf ausgeben, damit die Benutzeroberfläche nicht mehr reagiert, und außerdem müssen wir warten, bis die Aufgabe abgeschlossen ist, um fortzufahren.

Also, wenn wir so etwas wie dies in Command haben

public RelayCommand CloseCommand 
{ 
    get { return _closeCommand ?? _closeCommand = new RelayCommand(async() => 
    { 
     foreach (var screen in Screens) 
     { 
      if (!await screen.CloseCommand.ExecuteAsync(null)) 
      { 
       // do something 
      } 
     } 
    }) } 

} 

Wir könnten auch zusätzliche Methode auf dem Bildschirm aussetzen, aber meiner Meinung nach sollte es Aufgabe der RelayCommand sein, da es dort bereits vorhanden sind.

Oder gibt es eine andere Methode, um ein solches Szenario zu behandeln?

Antwort

2

Wahrscheinlich, weil es viele verschiedene Möglichkeiten gibt, dies zu tun; Ich beschreibe einige Ansätze in my MSDN article on the subject.

Asynchrone Lebensdauer Befehle sind besonders schwierig. Etwas wie ein "Schließen" -Befehl muss sorgfältig bedacht werden. Gibt es Anzeichen dafür, dass ein Abschluss stattfindet? Was passiert, wenn der Benutzer mehr als einmal schließt (insbesondere "Schließen" kann oft von einem Betriebssystem oder einer anderen App initiiert werden, selbst wenn eine "Schließen-Schaltfläche" deaktiviert ist)?

+0

Verwendet dies MVVM Light? – dumbledad

+0

@dumbledad: Nein, es ist Framework-Agnostiker. –

+0

Ich kann nicht sehen, wie ich es auf MVVM Light anwenden würde, (speziell) (http://stackoverflow.com/q/30729999/575530), wie man Daten aus der Datei (dh einen unvermeidlichen asynchronen Job) in den Konstruktor des Ansichtsmodells lädt so dass Seiten blendbar sind. Ich werde weiter nachdenken. – dumbledad

Verwandte Themen