Navigieren zu einer neuen Seite über das Ansichtsmodell in der universellen Windows Phone 8.1 App

8

Ich arbeite an einer universellen Windows Phone 8.1-App und möchte die beste Methode für die Seitennavigation finden, ohne große Mengen an Logik im Code dahinter zu haben. Ich möchte den Code in meiner Ansicht so übersichtlich wie möglich halten. Was ist die akzeptierte MVVM-Methode zum Navigieren zu einer neuen Seite als Reaktion auf einen Klick?

Ich muss derzeit eine RelayCommand-Nachricht vom ViewModel an die Ansicht mit den Details der Seite senden, zu der navigiert werden soll. Dies bedeutet, dass der Code dahinter wie folgt verdrahtet werden muss:

%Vor%

Das scheint nicht der beste Weg, obwohl es funktioniert. Wie kann ich die Seitennavigation direkt vom ViewModel aus durchführen? Ich verwende MVVM-Light in meinem Projekt.

    
AndrewJE 15.10.2014, 10:23
quelle

3 Antworten

10

Ok, ich habe eine Antwort auf diese Frage gefunden. Nahm ein wenig Untersuchung, aber ich fand schließlich die bevorzugte MVVM-Light Art und Weise, dies zu tun. Ich nehme diese Antwort auf keinen Fall an, sondern poste sie einfach hier, falls die Leute nach einer Antwort auf diese Frage suchen.

Erstellen Sie eine INavigationService-Schnittstelle wie folgt:

%Vor%

Erstellen Sie eine NavigationService-Klasse wie folgt:

%Vor%

Stellen Sie es jetzt im ViewModelLocator so ein:

%Vor%

Als nächstes richten Sie einen Navigationsdienst für die Entwurfszeit wie folgt ein:

%Vor%

Mein MainViewModel-Konstruktor lautet wie folgt:

%Vor%

Jetzt können Sie das einfach verwenden, um in Ihrem Ansichtsmodell zu navigieren:

%Vor%

Weitere Einzelheiten zum ursprünglichen Autor Laurent Bugnion finden Sie in diesem Artikel und dem zugehörigen Code. Ссылка

    
AndrewJE 15.10.2014, 15:51
quelle
1

Es gibt eine neue und einfachere Implementierung hier: Ссылка
Zuerst erstellen wir die NavigationService und DialogService (für die Seitennavigationsparameter):

%Vor%

Dann erstellen wir ein RelayCommand und NavigationService in Ihrem ViewModel , so:

%Vor%

Und schließlich können wir die Seitennavigationsparameters wie folgt erhalten:

%Vor%

Aber um die Argumente zu lesen, die in der Seitennavigation im MVVM-Muster übergeben wurden, können Sie einen Blick werfen hier .

    
Schrödinger's Box 05.12.2014 09:12
quelle
0

Ich stimme ricochete oben zu, es ist einfacher, obwohl meine direkte Umsetzung mit meiner Designdatenbindung in Blend überlagert ist.

Ich habe beschlossen, eine Klasse zu erstellen, die vom NavigationService geerbt wurde

%Vor%

Dann habe ich es im ViewModelLocator auf diese Weise registriert

%Vor%

Meine Design View-Datenbindung funktionierte erneut. Wenn jemand erklären könnte, warum die Designdaten in ricochete nicht funktionieren, tun Sie es bitte. Danke!

    
gangakryss 28.12.2014 13:30
quelle