我在way 1
下面使用导航到名为PageTemplate
的页面(可能来自页面A),并使用data1
对其进行初始化。
this.Frame.Navigate(typeof(PageTemplate), data1);
在PageTemplate
中,我在way 2
下面使用它来初始化其页面数据。
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter != null)
{
var data = e.Parameter as DataModel;
...
}
}
下一次,我可能会从页面B导航至PageTemplate
,并使用data2
初始化PageTemplate
:
this.Frame.Navigate(typeof(PageTemplate), data2);
问题1:
那么最后,带有PageTemplate
的{{1}}和带有data1
的{{1}}都在导航缓存中吗?
如果没有,怎么实现呢?我的意思是相同的PageTemplate
(页面元素和架构师相同),同时在导航缓存中具有不同的数据。
问题2:
如果我们有解决方案将具有data1 / data2的data2
作为导航缓存中的两个不同页面放置,那么如何导航到它们?
答案 0 :(得分:0)
那么最后,带有data1的PageTemplate和带有data2的PageTemplate都在导航缓存中吗?
如果我们按此顺序导航(A-> PageTemplate-> B-> PageTemplate),我们可以确保带有data1的PageTemplate和带有data2的PageTemplate都在导航堆栈中?而且您可以使用BackStack
属性
如果我们有解决方案将具有data1 / data2的相同PageTemplate作为两个不同的页面放入导航缓存中,那么如何导航到它们呢?
如果要同时使用PageTemplate
处理data1和data2类型。我们需要使用源页面的标签设置data1并在PageTemplate
中检测数据类型,然后切换到其他工作流程。
使用Dictionary
打包参数,该参数可以将源页面标签存储到关键部分。
var parameter = new Dictionary<string, object>();
parameter.Add(nameof(MainPage), data1);
this.Frame.Navigate(typeof(PageTemplate), parameter);
数据处理
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter != null)
{
var data = e.Parameter as Dictionary<string, object>;
foreach (var key in data.Keys)
{
switch (key)
{
case "MainPage":
break;
case "OtherPage":
break;
default:
break;
}
}
}
base.OnNavigatedTo(e);
}