如何使用空白页面模板在Windows 8.1中存储状态?

时间:2015-04-11 10:57:20

标签: c# windows-8.1

我正在将Windows Phone 8应用程序迁移到Windows 8.1应用程序,并且我创建了一个带有空白页面模板的页面。在那里有一些项目,如TextBlock,ComboBox和TextBox。现在,有一个项目LocationTextBlock,它周围有边框。当我点击它时,它会导航到新的Page LocationPage ,我需要选择位置并保存该对象并使用 Frame.GoBack()方法进行导航。现在问题是,当我向后导航时,我得到了LocationData的对象,但之前创建的LocationTextBlock显示为null,因此我无法在该TextBlock中填充Location。

问题

  1. 是否因空白页面模板而发生此问题?
  2. 可以使用NavigationHelper Class解决吗?
  3. 使用基本页面模板会解决此问题吗?
  4. 请提供一些代码或说明,是否可以使用空白页模板完成,因为我在其中添加了许多代码行。

1 个答案:

答案 0 :(得分:1)

可以使用空白页面模板完成(尽管使用NavigationHelper将是首选方式)。 您需要做的是在Page的构造函数中将NavigationCacheMode设置为Enabled:

this.NavigationCacheMode = NavigationCacheMode.Enabled;

这样,缓存了包含其中所有属性的页面。因此,当您向后导航时,您将返回当您从中导航时页面所处的状态。但是,如果您不通过回航导航到此页面,您仍然会收到您不想要的已保存状态。解决方案是在OnNavigatedTo(NavigationEventArgs e)方法if (e.NavigationMode != NavigationMode.Back)中清理所有资源(初始化所需的变量,将UI元素设置为默认值等)。不知道它是否是最佳方法,但它能够发挥作用。

编辑:

您甚至可以使用Flyout或ContentDialog代替您的LocationPage,因此您无需从页面导航,因此无需缓存/保存页面。