积极答复者
NavigationCacheMode 页面导航 在线等……

问题
-
我描述一下我的问题:我有三个页面,暂且说成PageA/PageB和PageC好了,PageA上有一按钮可以导航到PageB,PageB绑定数据,DataContext是一个继承自IncrementalLoadingBase的一个类,(public abstract class IncrementalLoadingBase : BaseModel, IList, ISupportIncrementalLoading, INotifyCollectionChanged)PageC是PageB对应的详情页面
1/如果我设置NavigationCacheMode="Enabled" 当我从PageB选择一项到PapeC,在GoBack到PageB时,PageB能够保存之前的页面状态,滚动位置。但是我在从PageB GoBack到PageA后,再次Navigate到PageB时,发现PageB也不在进行初始化,没有进入构造函数,这不是我想要的,PageB所绑定的数据上下文也没用改变(即使在导航之前从新new 了数据上下文对象),
2/如果设置NavigationCacheMode="Disable" 时,PageB每次都会进行初始化,即使是PageC GoBack来的,这也不是想要的效果,因为它没有保持页面状态。
我想要的效果是,在由PageA导航到PageB时,PageB所绑定的对象集合清空,并且能够初始化页面(进入构造函数),自动触发IncrementalLoadingBase 中的LoadMoreItemsAsync函数,进行相应条件的请求。而PageC GoBack到PageB时我希望它能够保持原有的状态不进行初始化页面。
如对我的描述有不清楚,敬请提出,谢谢!
在线等……
答案
-
Hi,
这有一个直接修改LayoutAwarePage的解决方案,但后来发现有内存泄露问题而且解决不了。所以我的建议就是把数据手动的存在一个自定义的类中,用来存放用于更新页面的数据。
之后在页面中重写OnNavigatedTo方法,NavigationEventArgs里面通过NavigationMode可以判断是返回的还是新的页面(比如新的就是new)。这样手动的进行加载数据。
Aaron Xue [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Aaron XueModerator 2012年11月9日 9:20
-
Hi,
抱歉回复的比较迟。
请不要设置NavigationCacheMode=true,我前面提到的内存泄露就是设置这个并且改变了LayoutAwarePage引起的。我的做法是NavigationCacheMode=false,但是手动的自己保持一份数据,因为OnNavigatedTo方法传过来的值可以判断出是否是第一次进入这个页面,因此我们可以选择性的加载我们自己保存的数据。(比如,这个数据用来在返回或者是第一次进入页面显示不同的内容等等)。
Aaron Xue [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Aaron XueModerator 2012年11月9日 9:23
全部回复
-
Hi,
这有一个直接修改LayoutAwarePage的解决方案,但后来发现有内存泄露问题而且解决不了。所以我的建议就是把数据手动的存在一个自定义的类中,用来存放用于更新页面的数据。
之后在页面中重写OnNavigatedTo方法,NavigationEventArgs里面通过NavigationMode可以判断是返回的还是新的页面(比如新的就是new)。这样手动的进行加载数据。
Aaron Xue [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Aaron XueModerator 2012年11月9日 9:20
-
Hi,
这有一个直接修改LayoutAwarePage的解决方案,但后来发现有内存泄露问题而且解决不了。所以我的建议就是把数据手动的存在一个自定义的类中,用来存放用于更新页面的数据。
之后在页面中重写OnNavigatedTo方法,NavigationEventArgs里面通过NavigationMode可以判断是返回的还是新的页面(比如新的就是new)。这样手动的进行加载数据。
Aaron Xue [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
HI,这个问题我也遇见,能否详细说明一下您的方案,是继续使用系统的NavigationCacheMode=TRUE,在重写 OnNavigatedTo方法,判断是否是新页面返回,做自定义的数据处理,还是其它的? -
Hi,
抱歉回复的比较迟。
请不要设置NavigationCacheMode=true,我前面提到的内存泄露就是设置这个并且改变了LayoutAwarePage引起的。我的做法是NavigationCacheMode=false,但是手动的自己保持一份数据,因为OnNavigatedTo方法传过来的值可以判断出是否是第一次进入这个页面,因此我们可以选择性的加载我们自己保存的数据。(比如,这个数据用来在返回或者是第一次进入页面显示不同的内容等等)。
Aaron Xue [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Aaron XueModerator 2012年11月9日 9:23