如何导航到UWP页面的实例?

时间:2019-08-05 15:44:03

标签: uwp

我在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作为导航缓存中的两个不同页面放置,那么如何导航到它们?

1 个答案:

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