Windows 8 Windows 8应用程序:如何在GoBack()上传递参数?

Windows 8 Windows 8应用程序:如何在GoBack()上传递参数?,windows-8,navigation,windows-runtime,Windows 8,Navigation,Windows Runtime,有许多示例显示了如何在导航到Window8(WinRT)中的页面时传递参数。但是我找不到任何关于返回参数的提示 情况:用户导航到相同数据的详细信息页面。数据通过 Frame.Navigate(typeof(DedtailsPage), data); 如何在GoBack()上传回已更改的数据?将对数据的引用存储在某个位置,并在返回时检索它 还请注意,最好不要在页面之间传递除简单字符串或值以外的对象,因为只有简单类型才支持存储框架导航状态,以防应用程序挂起。我知道,这是一个非常糟糕的主意,但我通常

有许多示例显示了如何在导航到Window8(WinRT)中的页面时传递参数。但是我找不到任何关于返回参数的提示
情况:用户导航到相同数据的详细信息页面。数据通过

Frame.Navigate(typeof(DedtailsPage), data);

如何在
GoBack()
上传回已更改的数据?

将对数据的引用存储在某个位置,并在返回时检索它


还请注意,最好不要在页面之间传递除简单字符串或值以外的对象,因为只有简单类型才支持存储框架导航状态,以防应用程序挂起。

我知道,这是一个非常糟糕的主意,但我通常使用以下方法:

  • 写:

    Frame rootFrame=Window.Current.Content作为Frame;
    rootFrame.Tag=myObject1

  • 全文如下:

    Frame rootFrame=Window.Current.Content作为Frame;
    var myObject2=rootFrame.Tag


  • 我做了另一个选择来处理这件事。 请记住,我是一名Xamarin开发人员(不是表单!),所以我正在寻找一种适用于所有平台的类似解决方案:iOS、Android和Windows

    我对事件非常感兴趣,而不是传递对象或存储全局。 因此,将数据从PageB(子级)传递到PageA(父级)的最佳选择是通过事件进行通信

    注意:在iOS和Android中,当您从“页面”导航到“页面”时,可以通过传递要导航到的目标对象的实例来实现。在iOS中,创建自定义UIViewController的实例。在Android中,您创建一个自定义片段的实例。这样做可以将事件处理程序附加到实例

    例如:

    var controller = new ExtrasViewController();
    controller.ExtraSelected += ExtrasFragment_ExtraSelected;
    controller.ExtrasCleared += ExtrasFragment_ExtrasCleared;
    this.NavigationController.PushViewController(controller, false);
    
    在WinRT应用程序中,您只允许传递要导航到的目标页面的“类型”。因此,将事件处理程序附加到页面实例的唯一方法是使用调用页面中的OnNavigatedFrom方法。因此,假设您在PageA中,希望将一些事件处理程序附加到PageB,在它变为活动状态之前,只需在PageA中编写“代码隐藏”:

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        base.OnNavigatedFrom(e);
    
        var page = e.Content as ExtraBody;
        if(page != null)
        {
            page.ExtraSelected += ExtrasFragment_ExtraSelected;
            page.ExtrasCleared += ExtrasFragment_ExtrasCleared;
        }
    }