将对象传递到下一页

本文关键字:一页 对象 | 更新日期: 2023-09-27 18:05:06

我有一个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, :(
}

我在Second页面上尝试了this.Loaded从手机的存储中反序列化accountslist,但结果仍然是相同的(应用程序在从First页面加载/导航时崩溃)

将对象传递到下一页

我很清楚你的意思。你有一个带有多个页面的单一框架。第一页中的数据需要通过Navigate()方法发送到第二页,对吧?

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

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

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

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

同时,在Frame.Navigate()中传递参数,然后在Page.OnNavigatedTo()中接收它,这是一个很好的开始,直到你开始为你的应用添加更复杂的东西。

祝你好运!