2017-05-08 2 views
0

Ich erstelle meine erste Prism/XF-Anwendung. Die Hauptseite ist eine MasterDetailPage. Ich habe gelesen, dass, um die Detailseite von der Masterseite VM zu ändern, ich nur NavigationService.NavigateAsync ("NewDetailPage") aus dem MasterPageViewModel aufrufen muss.So navigieren Sie in einem Prisma Master-Detail Xamarin.Forms-Anwendung

Wenn ich dies tue, ändert sich die Masterseite und wird NewDetailPage. Ich möchte die MasterDatilPage beibehalten und ihre Detailseite ändern.

Hier ist meine App Klasse

public partial class App : PrismApplication 
{ 
    public App(IPlatformInitializer initializer = null) : base(initializer) { } 

    protected override void OnInitialized() 
    { 
     InitializeComponent(); 

     NavigationService.NavigateAsync("MenuPrincipalPage/ClubHousePage"); 
    } 

    protected override void RegisterTypes() 
    { 
     Container.RegisterTypeForNavigation<MenuPrincipalPage>(); 
     Container.RegisterTypeForNavigation<ClubHousePage>(); 
     Container.RegisterTypeForNavigation<AProposPage>(); 
    } 
} 

Dies funktioniert gut. Die Anwendung wird mit dem richtigen Master (MenuPrincipalPage) und dem korrekten Detail (ClubHousePage) gestartet.

Ich MenuPrincipalPageViewModel (die Master-Seite VM), habe ich ein paar Dinge ausprobiert. Navigieren Sie zuerst direkt zur Detailseite:

public DelegateCommand AProposCommand { get; private set; } 

    private void APropos() 
    { 
     NavigationService.NavigateAsync("AProposPage",); 
    } 

Die MasterPage wurde geändert.

Ich versuchte dann das:

public DelegateCommand AProposCommand { get; private set; } 

    private void APropos() 
    { 
     NavigationService.NavigateAsync("MenuPrincipalPage/AProposPage"); 
    } 

Der Master auch geändert wird.

Dieser Code funktioniert:

public DelegateCommand AProposCommand { get; private set; } 

    private void APropos() 
    { 
     NavigationService.NavigateAsync("/MenuPrincipalPage/AProposPage"); 
    } 

Aber ist es nicht ein Problem hier? Der vollständige Navigationsstapel ist gelöscht, denke ich.

Habe ich etwas falsch gemacht?

Vielen Dank im Voraus für Ihre Ratschläge, Julien

Antwort

2

Es ist genau funktioniert wie es sollte. Was lässt Sie denken, dass Sie die MasterDetailPage ändern? Liegt es daran, dass Sie kein Hamburgermenü haben? Ich nehme an, dass das, wie Sie es jetzt eingerichtet haben, zu einer MasterDetailPage führen wird, die kein Hamburger-Menü hat und den Anschein erweckt, dass es keine MasterDetailPage gibt. Sie können dies leicht testen, indem Sie navigieren und vom linken Rand wischen, um das Master-Menü anzuzeigen.

Wenn Sie eine MasterDetailPage verwenden, sollten Sie Ihre Details in eine NavigationPage einfügen.

NavigationService.Navigate("MasterDetailPage/NavigationPage/Detail");

Dann kann jede Navigation innerhalb der Detailseite erfolgt eine Zurück-Taste automatisch haben es Navigationsstapel ist.

+0

Hallo Brian, Ich habe eine NavigationPage hinzugefügt, aber mein Problem ist immer noch da. In der Tat ist meine Frage: Warum sollte ich ein/am Anfang der Navigations-URL setzen? Der folgende Code funktioniert: NavigationService.NavigateAsync ("/ MenuPrincipalPage/ContenuPage/AProposPage"); Während dieser nicht: NavigationService.NavigateAsync ("MenuPrincipalPage/ContenuPage/AProposPage"); Der einzige Unterschied ist der/am Anfang. –

+0

Wenn Sie am Anfang ein "/" setzen, setzen Sie den Navigationsstapel zurück. Es klingt, als ob du etwas falsch machst. Wenn Sie vom Master aus navigieren, verwenden Sie einfach "NavigationPage/Target" und schließen Sie die Master-Detailseite nicht in den Pfad ein. Sehen Sie sich dieses Beispiel an: https://github.com/PrismLibrary/Prism-Samples-Forms/tree/master/HamburgerMenu –

+0

Hi Brian, der NavigationPage/Target verwendet, wird die Zurück-Schaltfläche in ViewA \ ViewB \ ViewC nicht anzeigen. Nur das Hamburgermenü oben – kaycee

Verwandte Themen