Как перейти с одной страницы xaml на другую и передать значения?

Немного связано с этой темой здесь: Асинхронное чтение XML в Windows Phone 7

Я разрабатываю приложение для Windows Phone, и у меня есть функция поиска в моем файле Search.xaml.cs. Вызывается по нажатию кнопки, создает поисковый запрос и с ним вызывает DownloadStringInBackground

    private void SearchQuery(object sender, EventArgs e)
    {
        string temp = "http://api.search.live.net/xml.aspx?Appid=myappid&query=randomqueryhere&sources=web";
        DownloadStringInBackground(temp);
    }

    public static void DownloadStringInBackground(string address)
    {
        WebClient client = new WebClient();
        Uri uri = new Uri(address);

        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCallback);
        client.DownloadStringAsync(uri);
    }

    private static void DownloadStringCallback(Object sender, DownloadStringCompletedEventArgs e)
    {
        // Fancy manipulation logic here

        finalResult = words;
    }

finalResult был сохранен как

public static string[] finalResult;

в классе поиска. Мой вопрос: где я могу поместить команду навигации (NavigationService.Navigate (новый Uri ("/Result.xaml", UriKind.Relative));)? Я пытался сделать это в обратном вызове, но получаю исключение nullobject из-за статического ключевого слова. Как я могу гарантировать, что finalResult был заполнен, и что я могу перейти к Result.xaml и сослаться на данные в finalResult на этой странице. В качестве альтернативы, как я могу передать Words или finalResult в Result.xaml?

Спасибо за поиск :)


person Freakishly    schedule 14.12.2010    source источник
comment
Вот и получается, что я неправильно подходил к своей проблеме. Правильный подход здесь: jaylee.org/post/2010/06/22/ Я собираюсь отметить ответ Мика как правильный, потому что это ответ на мой первоначальный вопрос. Всем спасибо.   -  person Freakishly    schedule 16.12.2010
comment
Лучшее решение IMO: stackoverflow.com/questions/4701566/   -  person radsdau    schedule 21.03.2013


Ответы (2)


Здесь есть пошаговое руководство по передаче значений между страницами.

Как выполнить навигацию по страницам на Windows-телефон

person Mick N    schedule 14.12.2010
comment
Не могли бы вы четко описать, где (и по какой ссылке на объект) возникает исключение нулевого объекта? - person Mick N; 16.12.2010
comment
В DownloadStringCallback, каково значение finalResult непосредственно перед Navigate(), если вы помещаете вызов Navigate сразу после него. Можете ли вы прервать навигацию, найти ненулевое содержимое и выполнить дальнейшие действия без ошибок. Если да, и без точки останова это не удается, может ли быть какая-то проблема с синхронизацией, связанная с тем, что код не отображается (слова). - person Mick N; 16.12.2010

Если вы не сделаете функцию обратного вызова статической, вы можете сделать это:

Dispatcher.BeginInvoke(() => NavigationService.Navigate(new Uri("/Result.xaml", UriKind.Relative)));

Если функция обратного вызова должна быть статической, вы можете использовать:

Deployment.Current.Dispatcher.BeginInvoke();
person Matt Lacey    schedule 14.12.2010
comment
Если я удаляю ключевое слово static из функции обратного вызова (DownloadStringCallback), я получаю сообщение об ошибке: для нестатического поля, метода или свойства DownloadStringCallback требуется ссылка на объект. - person Freakishly; 16.12.2010