2015-07-28 7 views
0

У меня есть 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 на странице Second десериализовать accountslist из памяти телефона , но результат все тот же (приложение разбилось, когда оно загружается/перемещается с страницы.)

+0

Вы отлаживали приложение, какое исключение вы получили? Вы получаете исключение по указанной линии или где-то еще? Каков объем списка учетных записей? И сторона примечания - вы перемещаетесь между страницами в пределах одного кадра (по крайней мере, в коде, который вы опубликовали). – Romasz

+0

Вы инициализировали свой список учетных записей, прежде чем переходить ко второму кадру? Ваш код для передачи параметров действительно прав. Поэтому я думаю, что мы не можем помочь без дополнительной информации. – ivamax9

ответ

1

Я уверен, что знаю, что вы имеете в виду. У вас есть один кадр с несколькими страницами. И у вас есть данные на первой странице, которую вы хотите отправить на вторую страницу с помощью метода Navigate(), правильно?

Метод Navigate() кадра включает аргумент параметра, который отображается в методе переопределения OnNavigatedTo() получающей страницы. Это самый быстрый и простой способ отправки параметров с одной страницы на другую.

Это, как говорится, это не то, как я это делаю. Причина, по которой я не делаю этого, заключается в том, что MSDN рекомендует передавать только строку. Зачем? Поскольку (и это звучит немного продвинуто для того, где вы сейчас находитесь), когда вы обрабатываете приостановку своего приложения, частью этой операции является сериализация стека навигации.

Когда мне нужно передавать информацию с одной страницы на другую, важно помнить, что все, что я прохожу, должно быть воссоздано, если приложение будет возобновлено после завершения. Поэтому, если бы у меня был класс, который мне нужно было переходить с одной страницы на вторую, я бы сначала обеспечил сериализацию данных в другом месте (в удаленной базе данных, в локальной базе данных или в локальной файловой системе), а затем перешел на страницу 2 только строка, необходимая для ее поиска и десериализации данных. Это звучит как серьезный сложный дополнительный шаг, но это означает, что пользовательский опыт перехода через государство является гладким и безболезненным. Это больше для разработчика, но лучше для пользователя.

Дополнительная информация: http://blogs.msdn.com/b/mspfe/archive/2013/06/17/suspend-and-resume-in-winrt.aspx

В то же время, передавая параметр в Frame.Navigate(), а затем получать его в Page.OnNavigatedTo() является прекрасным местом для начала, пока вы не начнете добавлять более изощренность для вашего приложения.

Удачи!

+0

Спасибо Джерри Никсону за знание! : D – rydev

+0

Я сделал класс «NavigationContext» для передачи данных со страницы на другую, но я не уверен, как передать изображение (выбранное из файла) на другую страницу. –

+0

Как сериализовать изображение в локальной файловой системе и как ее найти и десериализировать? –

Смежные вопросы