MVVM-Ladedaten während oder nach der ViewModel-Erstellung?

Meine allgemeine Frage lautet, wie der Titel besagt, ist es am besten, Daten während der ViewModel-Konstruktion oder danach durch eine Loaded-Ereignisbehandlung zu laden.

Ich vermute, die Antwort erfolgt nach der Erstellung über Loaded Event Handling, aber ich frage mich, wie das zwischen ViewModel und View am saubersten koordiniert wird.

Hier sind weitere Details zu meiner Situation und dem speziellen Problem, das ich zu lösen versuche:

Ich verwende das MVVM Light Framework sowie Unity for DI. Ich habe einige verschachtelte Ansichten, die jeweils an ein entsprechendes ViewModel gebunden sind. Die ViewModels sind über die ViewModelLocator-Idee, die Laurent Bugnion in MVVM Light integriert hat, an das Stammsteuerelement DataContext der einzelnen Views gebunden. Dies ermöglicht das Auffinden von ViewModels über eine statische Ressource und das Steuern der Lebensdauer von ViewModels über ein Abhängigkeitsinjektionsframework, in diesem Fall Unity. Mit Expression Blend können Sie außerdem alle Informationen zu ViewModels anzeigen und diese binden.

Auf jeden Fall habe ich eine übergeordnete Ansicht, deren ViewModel eine ComboBox-Datenbasis für eine ObservableCollection enthält. Das SelectedItem der ComboBox ist auch (bidirektional) an eine Eigenschaft im ViewModel gebunden. Wenn sich die Auswahl der ComboBox ändert, werden Aktualisierungen in anderen Ansichten und Unteransichten ausgelöst. Zur Zeit bewerkstellige ich dies über das Messaging-System in MVVM Light. Dies alles funktioniert hervorragend und wie erwartet, wenn Sie verschiedene Elemente in der ComboBox auswählen.

Das ViewModel ruft seine Daten jedoch während der Konstruktionszeit über eine Reihe von Initialisierungsmethodenaufrufen ab. Dies scheint nur dann ein Problem zu sein, wenn ich steuern möchte, wie das ursprüngliche SelectedItem der ComboBox lautet. Unter Verwendung des Messagingsystems von MVVM Light habe ich es derzeit so eingerichtet, dass der Setter der SelectedItem-Eigenschaft von ViewModel derjenige ist, der das Update sendet, und die anderen interessierten ViewModels registrieren sich in ihren Konstruktoren für die Nachricht. Es scheint, dass ich gerade versuche, das SelectedItem über das ViewModel zur Erstellungszeit festzulegen, wodurch es noch nicht möglich war, untergeordnete ViewModels zu erstellen und zu registrieren.

Was wäre die sauberste Methode, um das Laden von Daten und die anfängliche Einstellung von SelectedItem im ViewModel zu koordinieren? Ich möchte mich wirklich daran halten, so wenig Code-Behind wie möglich in den View einzubauen. Ich denke, ich brauche nur eine Möglichkeit, damit das ViewModel weiß, wann etwas geladen wurde und dass es dann die Daten weiterhin laden und die Einrichtungsphase abschließen kann.

Vielen Dank im Voraus für Ihre Antworten.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage