C# UWP Navigation查看相同类型的多个页面

C# UWP Navigation查看相同类型的多个页面,c#,xaml,uwp,uwp-xaml,C#,Xaml,Uwp,Uwp Xaml,我允许用户向导航窗格添加其他导航项。所有这些都具有相同的页面类型(SCWebViewPage)。问题是,在导航时,您只提供类型,而不提供实例。显然,我可以使用object参数来指定应该加载哪个视图。然而,我将无法使用导航缓存。有什么想法吗?谢谢。UWP的框架仅允许使用导航(类型pageType,对象参数)方法导航到页面类型。这意味着新导航总是创建页面的新实例。您无法导航到现有实例(虽然可以将页面实例分配给框架.Content,但这不是正确的方法,并且违背了框架的全部目的) 您可以做的是提供一个参

我允许用户向导航窗格添加其他导航项。所有这些都具有相同的页面类型(
SCWebViewPage
)。问题是,在导航时,您只提供类型,而不提供实例。显然,我可以使用object参数来指定应该加载哪个视图。然而,我将无法使用导航缓存。有什么想法吗?谢谢。

UWP的
框架
仅允许使用
导航(类型pageType,对象参数)
方法导航到页面类型。这意味着新导航总是创建页面的新实例。您无法导航到现有实例(虽然可以将页面实例分配给
框架.Content
,但这不是正确的方法,并且违背了
框架的全部目的)

您可以做的是提供一个
参数
,页面将使用该参数了解应该显示什么。我认为让您感到困惑的是,许多示例使用菜单项上的标记参数来定义应该导航到的页面类型,但是您也可以很容易地使用任意字符串,然后您可以利用该字符串来知道您希望导航到的位置。类似的方法见此。例如,请参见以下内容:

<NavigationViewItem Icon="Home" Tag="FirstPage">
   <TextBlock>First</TextBlock>
</NavigationViewItem>
<NavigationViewItem Icon="Setting" Tag="SecondPage">
   <TextBlock>Second</TextBlock>
</NavigationViewItem>
现在,在
SCWebViewPage
code中,您可以覆盖
OnNavigatedTo
方法,检查
参数
,并采取相应措施:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.Parameter == "someParameter") ...
    else ...
}

只要导航参数是可序列化类型(这肯定是
string
),这将不会影响应用程序的功能,您甚至可以在暂停/恢复时完全存储和重新加载
框架
导航状态。

问题是您无法使用NavigationCacheMode?因为它不存储(缓存)虽然相同的页面类型,但有不同的内容。嗨,马丁,谢谢。是的,事实上这就是我最后做的。最初的问题是,我希望能够缓存这两个页面,这样用户就不必每次都等待页面加载。我最终做的是创建自己的缓存黑客。从页面导航时,我获取屏幕的位图图像,返回时,在加载内容时显示位图。至少可以说,这是一个令人讨厌的黑客攻击,但它满足了我的要求。如果您在持久化的ViewModel中拥有数据,那么从新页面绑定到现有视图模型的数据也应该非常即时。您可以查看MVVM模式通常如何处理此问题,例如在MvvmCross或Prism库中
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.Parameter == "someParameter") ...
    else ...
}