Как перейти с одной страницы xaml на другую и передать значения? - PullRequest
0 голосов
/ 14 декабря 2010

Несколько связанных с этой темой здесь: Асинхронное чтение 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 на этой странице. Альтернативно, как я могу передать слова или finalResult в Result.xaml?

Спасибо за внимание:)

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

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

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

0 голосов
/ 14 декабря 2010

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

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

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

Deployment.Current.Dispatcher.BeginInvoke();
...