代码之家  ›  专栏  ›  技术社区  ›  dude

将对象传递到下一页

  •  0
  • dude  · 技术社区  · 9 年前

    我有一个 List<accounts> accountslist 我想传递到框架中的另一个页面,但当我导航到下一个页面时,我的应用程序崩溃。

    C#:这是在 First

    //above this, there are codes that deserialize the List data from
    //phone's storage
    List<accounts> accountslist;
    
    Frame.Navigate(typeof(Second), accountslist); 
    //Second is the second page that I want the accountlist to go to.. 
    

    这是在 Second 页码:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        List<accounts> accountslist = e.Parameter as List<accounts>;
        //when Second frame is about to be displayed,
        //the app crashed, :(
    }
    

    我试过了 this.Loaded 第二 要反序列化 accountslist 但结果仍然是一样的(当从 第一 第页)

    1 回复  |  直到 9 年前
        1
  •  1
  •   Jerry Nixon    9 年前

    我很确定我知道你的意思。您有一个带有多页的框架。而且,您希望通过Navigate()方法将第一页中的数据发送到第二页,对吗?

    Frame的Navigate()方法包含在接收Page的OnNavigatedTo()重写方法中显示的参数参数。这是将参数从一个页面发送到另一个页面的最快和最简单的方法。

    尽管如此,我并不是这样做的。我不这样做的原因是MSDN建议您只传递一个字符串。为什么?因为(这听起来有点高级)当你处理应用程序的暂停时,操作的一部分是序列化导航堆栈。

    当我需要将信息从一个页面传递到另一个页面时,我需要记住的重要一点是,如果应用程序终止后恢复,我传递的任何内容都需要重新创建。因此,如果我有一个类需要从第1页传递到第2页,我将首先确保数据在其他地方(在远程数据库、本地数据库或本地文件系统中)序列化,然后只将查找和反序列化数据所需的字符串传递给第2页。这听起来像是一个非常复杂的额外步骤,但它确实意味着用户在状态转换过程中的体验是平滑和无痛的。这对开发人员来说是更多的工作,但对用户来说是更好的体验。

    更多信息: http://blogs.msdn.com/b/mspfe/archive/2013/06/17/suspend-and-resume-in-winrt.aspx

    同时,在Frame中传递参数。浏览(),然后在页面中接收它。OnNavigatedTo()是一个很好的开始,直到您开始为应用程序添加更多的复杂性。

    祝你好运!