Window Store应用程序 - 将值返回到调用页面

时间:2012-12-01 18:20:23

标签: windows-8

我有一个带有两个页面的WinRT“Windows应用商店”应用:列表页面和编辑页面。当用户单击列表项并从底部应用栏中选择“编辑”时,我将该项目传递到编辑页面。我需要的是支持两种可能的用户操作:

  • 如果用户使用后退按钮(顶部导航)导航回来,我希望未修改的项目返回到调用页面。

  • 如果用户点击提供的“保存”按钮(在编辑页面上),我想更新项目的各种属性,将其保存到数据存储并自动将修改后的项目返回到调用页。

无论哪种方式,调用页面都需要使用对项目所做的更改来更新其显示(如果有)。我可以完成大部分工作,但我无法弄清楚如何将项目返回到调用页面。我该怎么做?

请记住,将来会有其他页面添加到应用程序中(也将从主“列表”页面调用)。我需要进行调整,以便当我从给定的“子”页面返回到列表页面时,列表页面的行为将根据返回的页面而有所不同。 (希望这很有意义......)。

奖金问题:我还想捕获后退导航事件以通知用户修改后的项目将不会被保存,并为他们提供继续,保存和继续或取消返回导航操作的选项。这可能吗?

TIA

2 个答案:

答案 0 :(得分:1)

我认为这种方法对于我试图解决的问题是错误的。我从来没有找到一种特别好的方法将值从子页面返回到父页面。

相反,我的问题允许采用不同的方法。我有一个主列表<>我在应用程序中跟踪的项目。此列表<>被序列化为本地存储。当我调用子页面时,我传入现有项目(用于编辑)或空实例(用于添加)。

当我到达子页面时,我在LoadState方法中拉出传入的项目。如果传入的项为null,我创建一个新实例,它将成为我的工作实例。

从那里,我允许用户根据需要编辑项目。当用户保存项目时,我反序列化主列表<>从存储。然后我将新项目添加到主列表<>或替换List<>中的现有项目。然后我重新序列化主列表<>存储,取代原有的存储。

当用户返回到调用(父)页面时,我重新获取主列表<>来自LoadState方法中存储的项目并重新填充页面。如果更新了现有项目或添加了新项目,则父页面会准确反映更改。这最终只是我需要发生的事情。

我不知道是否有办法做我原先要求的事情,但在这种情况下,至少我认为我不需要那样做。可能是这种替代方法或类似方法是在“Back”事件中将对象传递到导航堆栈中的父页面的唯一方法。

答案 1 :(得分:0)

如果我理解你的问题,我相信你正在寻找这些方面的东西:

WinJS.Navigation.navigate("/path/to/your/page.html", {/*this object will be the second 'options' parameter to your page's ready function });

。 。

// This function is called whenever a user navigates to this page. It populates the page elements with the app's data.
ready: function (element, options) {