【问题标题】:Window Store app - return value to calling pageWindow Store 应用程序 - 将值返回到调用页面
【发布时间】:2012-12-07 07:13:18
【问题描述】:

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

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

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

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

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

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

TIA

【问题讨论】:

  • 您使用的是 C#/XAML 还是 HTML5/JS?

标签: windows-8


【解决方案1】:

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

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

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

从那里,我允许用户根据需要编辑项目。当用户保存项目时,我从存储中反序列化主 List。然后,我要么将新项目添加到主 List,要么替换 List 中的现有项目。然后我将主 List 重新序列化到存储中,替换已经存在的内容。

当用户返回调用(父)页面时,我从 LoadState 方法的存储中重新获取主 List 并重新填充页面。如果更新了现有项目或添加了新项目,则父页面会准确反映更改。这就是我最终所需要的。

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

【讨论】:

    【解决方案2】:

    如果我理解您的问题,我相信您正在寻找以下方面的内容:

    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) {
    

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多