在使用模板10的UWP应用中,我们有一个管理页面。 Admin页面在一个框架内有2个页面,AdminSettings1和AdminSettings2。我们希望在框架中的AdminSettings1和AdminSettings2之间导航,但是我们发现我们到达目标页面,但是丢失了包含页面。
我们如何使用Template 10 MVVM在框架内的页面之间导航而不会丢失包含页面?
XAML(缩写):
<SplitView Grid.Row="1"
x:Name="AdminSplitView"
IsPaneOpen="True"
DisplayMode="Inline">
<SplitView.Pane>
<Grid>
<ListView SelectionMode="Single"
Name="AdminListBox">
<ListViewItem Name="AdminSettings1"
IsSelected="True"
Tapped="{x:Bind AdminViewModel.GoToAdminSettings1}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Settings1"/>
</StackPanel>
</ListViewItem>
<ListViewItem Name="AdminSettings2"
Tapped="{x:Bind AdminViewModel.GoToJobformSettings2}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Settings2"/>
</StackPanel>
</ListViewItem>
</ListView>
</Grid>
</SplitView.Pane>
<SplitView.Content>
<Frame Name="AdminFrame" />
</SplitView.Content>
</SplitView>
我们像这样到达AdminPage
GoToAdmin() => NavigationService.Navigate(typeof(Views.AdminPage));
在AdminPageViewModel中,我们像这样导航到AdminPage2
public void GoToAdmin2() =>
NavigationService.Navigate(typeof(Views.AdminPage2));
但这会丢失包含的管理页面
我提到了Other examples of calling Navigate的T10文档。此选项导航到页面机器人丢失包含页面
// from inside any window
var nav = WindowWrapper.Current().NavigationServices.FirstOrDefault();
nav.Navigate(typeof(Views.AdminPage2));
我无法在文档中测试此示例,因为我不明白MyFrame来自哪里
// from/with a reference to a Frame
var nav = WindowWrapper.Current(MyFrame).NavigationServices.FirstOrDefault();
nav.Navigate(typeof(Views.DetailPage), this.Value);
我们如何使用Template 10 MVVM在框架内的页面之间导航?
答案 0 :(得分:0)
您可以使用页面缓存并使用此解决方案:https://github.com/MyToolkit/MyToolkit/wiki/Paging-Overview 来自这个问题:WinRT/UWP Frame and Page caching: How to create new page instance on Navigate() and keep the page instance on GoBack()
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;