2016-05-01 14 views
-2

In WP8.1 oder WPF Desktop-Apps konnte ich mein ViewModel als statische Instanz in App.xaml.cs erstellen und in der App als "App.myViewModel" bezeichnen, aber in UWP, das tut scheint nicht zu funktionieren (vielleicht durch Design?). Der Grund, warum ich ein globales ViewModel haben möchte ist, dass ich, wie viele Apps, eine Hauptseite habe, die die VM füllt, indem ich Informationen von Webseiten herunterlade (ich arbeite an einem geschäftsbasierten RSS Reader für einen Kunden) und wenn ich navigiere zu einer anderen Seite und kehre dann zu MainPage zurück. Mein vm ist wieder leer (da ich anscheinend keine andere Option habe, als auf MainPage zu deklarieren), also muss ich jedesmal die Daten neu laden.Global MVVM ViewModel in UWP App

Auch wenn ich von navigierten Seiten auf die VM zugreifen möchte, muss ich nun einen Verweis auf die VM durch diese Seite übergeben, während ich mit dem globalen Ansatz immer noch auf App.myViewModel zugreifen konnte.

Die einzige Zeit, die ich den VM-Inhalt ändere, ist von UI-Aktionen auf der Hauptseite, also möchte ich einfach von anderen Seiten zur Hauptseite zurück navigieren und die VM noch intakt haben.

Kann jemand bitte erklären, wie dies in UWP getan wird? Kann ich App.xaml.cs noch verwenden und wenn ja, wie? Wenn das nicht möglich ist, warum wurde es so entworfen?

+0

Obwohl es sich um ein Anti-Pattern handelt, könnten Sie ein Singleton für Ihre VM verwenden. So verlieren Sie nie irgendwelche Informationen. –

Antwort

1

Sie suchen ViewModelLocator. Hier haben Sie eine schöne Erklärung und ein Beispiel, wie Sie es verwenden können. https://stackoverflow.com/a/14154088/4727426

+0

Danke für die Antwort, aber das bedeutet, dass ich meine App umgestalten muss, um MVVMLight zu verwenden, was ich eher nicht möchte - gibt es ein Äquivalent, das nur normale MVVM-Strukturen verwendet? – nzmike

+0

Habe noch mehr recherchiert und es sieht wirklich so aus, als ob MVVMLight die beste Lösung ist, also habe ich dies als die Antwort markiert. – nzmike