2016-11-28 3 views
0

Ich verwende Xamarin Forms und Prism. Meine Navigation zwischen den Seiten erfolgt mit Prism INavigationService. Ich habe eine Xamarin Forms ContentPage mit vielen untergeordneten ContentViews, die eigene View-Modelle haben. Wenn ich auf einen untergeordneten ContentView klicke, möchte ich zu einer anderen ContentPage mit einigen Eigenschaften von untergeordnetem ContentView wechseln. Ich möchte wissen, ob es möglich ist, das übergeordnete Ansichtsmodell INavigationService an das untergeordnete ContentView-Ansichtsmodell zu übergeben. Oder gibt es andere Best Practices, die für meine Anforderungen verwendet werden können?Wie wird INavigationService vom übergeordneten ContentPage ViewModel an das untergeordnete ContentView ViewModel übergeben?

Antwort

0

Was müssen Sie tun, ist die Seite in Ihrem prismApplcation zu registrieren, die useually ist Ihr App.xaml Sobald Sie Ihre Seite registrieren, mit RegisterForNavigation < Seite> dann können Sie die INavigationService in der Konstrukteurs-Seite injizieren wie diese

private INavigationService _navigationService; 
public MyPage(INavigationService navigationService) 
{ 
    _navigationService = navigationService 
} 

Alternativ können Sie das gleiches tun in dem Ansichtsmodell der Seite (was empfohlen wird), aber Sie müssen auf dem Autolocater in der XAML-Datei von der Seite zu drehen, um sicherzustellen.

Dies ist der Fall, wenn Sie zwischen Inhaltsseiten navigieren möchten. In Ihrem Fall haben Sie jedoch mehrere Ansichten und jede Ansicht hat ihr eigenes Ansichtsmodell, obwohl dies die Regeln bricht, da die Ansichten grundsätzlich das Ansichtsmodell von ihrer Seite aus teilen können, aber wenn Sie darauf bestehen, dass es so ist, mein einziger Rat Wenn Sie Ihren Code nicht ansehen, müssen Sie die Ansichtsmodelle für jede Ansicht mit demselben Container registrieren, mit dem Sie die Seite registriert haben. Verwenden Sie RegisterType <>() dafür und Sie werden feststellen, dass Inavigationservice injiziert wird. Noch einmal, ich denke, es ist besser, dass Sie Ihr Code-Design ändern würden.

+0

Hallo BraveHeart, Danke für die Antwort. Die Registrierung ist nur für ContentPages und nicht für ContentViews möglich. Meine untergeordneten Objekte sind vom Typ ContentView. Also wird die Registrierung nicht funktionieren. –

0

Im Moment ist die einzige Problemumgehung für mich, dass ich die automatische Verkabelung für untergeordnete Ansichtsmodelle getrennt habe. Und ich habe alle meine untergeordneten Ansichtsmodelle als Mitgliedsvariablen in meinem Inhaltsseitenansichtsmodell erstellt und sie an die Ansichten in XAML gebunden. Es funktioniert für jetzt. Ich bin mir nicht sicher, ob dies die beste Praxis ist. Wenn jemand eine bessere Lösung findet, lass es mich wissen.

Verwandte Themen