none
windows 10 UWP中,页面切换时,如何有效的缓存页面? RRS feed

  • 问题

  • 举例来说:
    我有三个页面:【城市列表页】【餐厅列表页】【餐厅详情页】
    按照顺序,是首先打开【城市列表页】,点击一个城市后打开【餐厅列表页】,点击一个餐厅后打开【餐厅详情页】,

    【城市列表页】设置了缓存【this.NavigationCacheMode = NavigationCacheMode.Required】,
    【餐厅列表页】和【餐厅详情页】都未设置缓存,

    现在从【餐厅列表页】导航到【餐厅详情页】,再返回时,发现【餐厅列表页】由于未缓存已经被释放了,

    如果我把【餐厅列表页】设置【this.NavigationCacheMode = NavigationCacheMode.Required】的话,第二次从【城市列表页】导航到【餐厅列表页】时,还显示的是上次的城市对应的餐厅,


    那我该如何有效的实现:
    1.从【城市列表页】导航到【餐厅列表页】时,不使用【餐厅列表页】的缓存(因为一旦使用缓存,就是上次城市的餐厅),
    2.从【餐厅详情页】返回到【餐厅列表页】时,使用【餐厅列表页】的缓存


    备注:
    所有页面加载数据我都是这样加载的:
    protected override void OnNavigatedTo(NavigationEventArgs e)
     {
         if (e.NavigationMode == NavigationMode.New)
         {
             LoadData();
         }
         base.OnNavigatedTo(e);
     }



    2015年9月12日 4:22

答案

  • Hello,

    >>第二次从【城市列表页】导航到【餐厅列表页】时,还显示的是上次的城市对应的餐厅,

    这是一个by designed的行为,这个设置就是存储了最近一次的数据。

    >>那我该如何有效的实现:1.从【城市列表页】导航到【餐厅列表页】时

    这个行为要求用windows runtime默认的设置是不行的,你需要自己添加逻辑,我的建议是:
    因为在页面之间导航,可以同时传递参数:

    https://msdn.microsoft.com/en-us/library/windows/apps/hh702394.aspx

    可以传递一个string类型的来标识是从哪个页面跳过来的。

    如果是从城市列表页过来的,可以选择清空缓存:

    Clearing the page cache in Windows 8 Metro apps

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年9月14日 1:53
    版主
  • 可以在从餐厅列表页回到城市列表页时,将餐厅列表页(默认设置为Required)的NavigationCacheMode设置为Disabled。

    protected override async void OnNavigatingFrom(NavigatingCancelEventArgs e)
            {
                base.OnNavigatingFrom(e);
     
                switch (e.NavigationMode)
                {
                    case NavigationMode.Back:
                        {
                            NavigationCacheMode = NavigationCacheMode.Disabled;
                            break;
                        }
                }
            }

    2015年9月14日 9:24

全部回复

  • Hello,

    >>第二次从【城市列表页】导航到【餐厅列表页】时,还显示的是上次的城市对应的餐厅,

    这是一个by designed的行为,这个设置就是存储了最近一次的数据。

    >>那我该如何有效的实现:1.从【城市列表页】导航到【餐厅列表页】时

    这个行为要求用windows runtime默认的设置是不行的,你需要自己添加逻辑,我的建议是:
    因为在页面之间导航,可以同时传递参数:

    https://msdn.microsoft.com/en-us/library/windows/apps/hh702394.aspx

    可以传递一个string类型的来标识是从哪个页面跳过来的。

    如果是从城市列表页过来的,可以选择清空缓存:

    Clearing the page cache in Windows 8 Metro apps

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年9月14日 1:53
    版主
  • 可以在从餐厅列表页回到城市列表页时,将餐厅列表页(默认设置为Required)的NavigationCacheMode设置为Disabled。

    protected override async void OnNavigatingFrom(NavigatingCancelEventArgs e)
            {
                base.OnNavigatingFrom(e);
     
                switch (e.NavigationMode)
                {
                    case NavigationMode.Back:
                        {
                            NavigationCacheMode = NavigationCacheMode.Disabled;
                            break;
                        }
                }
            }

    2015年9月14日 9:24