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
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.
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.
- 1. MVVM ViewModel und untergeordnete Ansichten
- 2. Wie wird das gleiche Viewmodel mit Unity an eine untergeordnete Ansicht übergeben?
- 3. Wie übergeben Sie InkCanvas SelectedStrokes an viewmodel?
- 4. Übergeben der MainWindow-Instanz an ViewModel
- 5. DataContext von UserControl auf ViewModel setzen, das im übergeordneten ViewModel definiert ist
- 6. MVC übergeben JSON ViewModel anzeigen
- 7. ViewModel an CustomControl binden
- 8. Wie wird dieses ViewModel erstellt?
- 9. Datei-Upload an das Viewmodel gebunden
- 10. Wie übergebe ich den UI Dispatcher an das ViewModel
- 11. ViewModel zwischen Teilansichten übergeben MVC5
- 12. Mit MVVM, wie kann ein ContextMenu ViewModel das ViewModel finden, das das ContextMenu geöffnet hat?
- 13. Kann ViewModel andere ViewModel zurückgeben
- 14. Viewmodel nach Postback
- 15. Wie Design ViewModel
- 16. WPF-Bindungsanwendungsbefehle an ViewModel ICommand
- 17. Viewmodel kann von RedirectToAction nicht an neue Aktion übergeben werden
- 18. Ausgewähltes ViewModel von WPF datagrid an neues TabItem MVVM übergeben
- 19. Knockout das Viewmodel nicht aktualisiert
- 20. Knockout Viewmodel zur Aktion übergeben kommenden leeren
- 21. Wie binden Sie ViewModel Store an View?
- 22. Übergeben Sie einen Benutzer zu einem ViewModel
- 23. MVVMLight-- Übergeben eines Parameters an einen ViewModel-Konstruktor?
- 24. MVVM ViewModel im Vergleich zu MVC ViewModel
- 25. MVC 4 automatische Model Validation hängt auf ViewModel mit verschachtelten ViewModel
- 26. Wie bindet man rx_tap (UIButton) an ViewModel?
- 27. Wie Alarm von ViewModel angezeigt wird
- 28. Entity Framework Eager Loading - Daten an ViewModel übergeben
- 29. View and ViewModel wird zu groß
- 30. Ein ViewModel in die CSS-Datei übergeben
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. –