使用Template 10 MVVM

时间:2017-07-13 03:54:52

标签: xaml mvvm uwp-xaml template10

在使用模板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在框架内的页面之间导航?

1 个答案:

答案 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;