2017-01-13 3 views
2

Ich versuche, die folgende Art der Navigation in meiner UWP-App zu implementieren (mit Template10), aber ich habe Schwierigkeiten, die mehreren Frames als unabhängige History-Stacks zu verwenden.UWP-Navigation (Template10), Pivot-Steuerung, mehrere Frames

Side-by-side

Innerhalb jedes Rahmens des Dreh, würde ich wollen einen unabhängigen Rahmen haben, der seine eigene Geschichte und zurück Stapel hat. Das Navigieren zwischen den Frames wäre nur über den Pivot möglich.

Ich dachte an Code ähnlich dem folgenden:

<Pivot> 
    <PivotItem Header="PageA"> 
     <Frame x:Name="PageAFrame" /> 
    </PivotItem> 
    <PivotItem Header="PageB"> 
     <Frame x:Name="PageBFrame" /> 
    </PivotItem> 
    <PivotItem Header="PageC"> 
     <Frame x:Name="PageCFrame" /> 
    </PivotItem> 
</Pivot> 

aber ich bin mir nicht sicher, wie man tatsächlich die Navigation implementieren. Ich habe versucht, unter Verwendung von Code ähnlich der, aber ohne Glück:

var nav = Template10.Services.NavigationService.NavigationService.GetForFrame(PageAFrame); 

aber nav ist immer null.

habe ich auch versucht:

PageAFrame.Navigate(typeof(PageA)); 

Aber meine Viewmodels instanziiert werden nicht.

Irgendwelche Ideen?

Hinweis: Der Grund, warum ich kein Hamburger-Menü benutze, ist, weil ich in der Lage sein muss, zwischen den Pivots zu wechseln, aber trotzdem den unabhängigen History-Stack von jedem beizubehalten.

Antwort

2

Verschachtelte Frames sind in Ordnung. Mehrere Frames sind ein wichtiger Anwendungsfall, der definitiv von T10 unterstützt wird, aber die Leute erkennen, dass ein einzelner Frame standardmäßig unterstützt wird und mehrere Frames Entwicklercode benötigen.

Konzeptionell erstellt T10 einen NavigationService, der jeden Frame umschließt. Der erste erstellte NavService wird automatisch an die Schaltfläche "Zurück" der Anwendung angehängt. Dies kann jedoch vom Entwickler mithilfe von Argumenten in der NavigationServiceFactory neu zugewiesen oder deaktiviert werden.

https://github.com/Windows-XAML/Template10/blob/master/Template10%20(Library)/Common/Bootstrapper/BootStrapper.cs#L278

Für jeden Rahmen Sie Sie eine zugehörige Navigation mit der Factory-Methode erstellen einführen müssen. Wenn Sie dies tun, wird es bei T10 registriert und funktioniert einwandfrei. Davon abgesehen liegt der Workflow in Ihrer App nun bei Ihnen. Denken Sie daran, dass Sie anstelle von Frame.Navigate() immer NavigationService.Navigate() verwenden und auf den NavigationService mit GetForFrame() genauso zugreifen, wie Sie es angegeben haben.

Sinn machen?

+0

Hallo Jerry, Das funktioniert in Ordnung, aber ich bin mir nicht sicher, der beste Weg, um von Frame in meinem ViewModels zugreifen, so dass ich GetForFrame aufrufen kann? Im Moment mache ich eine Hacky Sache. 'WindowWrapper.Current() NavigationServices.FirstOrDefault (n => n.Frame.Name.Equals ("PageAFrame")).Frame; ' Aber ich fühle, dass es eine bessere Möglichkeit geben muss, auf den Rahmen zuzugreifen. Irgendwelche Ideen? – Darshan

0

Template10 Navigationsdienst kümmert sich um den root-Rahmen der Anwendung, es weiß nichts über Ihre verschachtelten Frames. Also ist mein Rat für Sie (und das ist, was ich getan habe), die verschachtelte Rahmennavigation manuell zu handhaben und verschwenden Sie nicht Ihre Zeit, einen Weg zu finden, das in Template10 zu tun.