2010-12-14 28 views
0

Un peu lié à ce sujet ici: Async XML Reading in Windows Phone 7Comment naviguer d'une page xaml à une autre et transmettre des valeurs?

Je développe une application Windows Phone, et j'ai une fonction de recherche dans mon dossier Search.xaml.cs. Il est appelé en cliquant sur un bouton, il crée une requête de recherche et appelle DownloadStringInBackground avec elle

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 a été enregistré comme

public static string[] finalResult; 

dans la classe de recherche. Ma question est, où puis-je mettre la commande Navigate (NavigationService.Navigate (new Uri ("/ Result.xaml", UriKind.Relative)))? J'ai essayé de le faire dans le rappel, mais j'obtiens une exception nullobject en raison du mot-clé static. Comment puis-je m'assurer que finalResult a été rempli, et que je peux naviguer vers Result.xaml et référencer les données dans finalResult sur cette page. Alternativement, comment puis-je passer des mots ou finalResult à Result.xaml?

Merci pour la recherche :)

+0

Il Il se trouve que j'allais sur mon problème dans le mauvais sens. La bonne approche est ici: http: //www.jaylee.org/post/2010/06/22/WP7Dev-Using-the-WebClient-with-Reactive-Extensions-for-Effective-Asynchronous-Downloads.aspx I Je vais marquer la réponse de Mick comme la bonne parce que c'est la réponse à ma question initiale. Merci tout le monde. – Freakishly

+0

La meilleure solution OMI: http://stackoverflow.com/questions/4701566/passing-a-complex-object-to-a-page-while-navigating-in-a-wp7-silverlight-applica/15536127 # 15536127 – radsdau

Répondre

3

Il y a une procédure pas à pas ici sur les valeurs qui passe entre les pages.

How to: Perform Page Navigation on Windows Phone

+0

joli lien, mais ne résout pas mon problème :( – Freakishly

+0

Pourriez-vous décrire clairement où (et sur quelle référence d'objet) l'exception d'objet nul se produit? –

+0

Dans DownloadStringCallback, quelle est la valeur de finalResult immédiatement avant de naviguer (Si vous passez un appel à Naviguer immédiatement après, êtes-vous en mesure d'interrompre la navigation, de trouver des contenus non nuls et de poursuivre l'exécution sans erreur Si oui, et sans le point d'arrêt, cela pourrait poser un problème de synchronisation avec le code non affiché (mots) –

0

Si vous ne faites pas la statique de la fonction de rappel que vous pouvez faire ceci:

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

Si la fonction de rappel doit être statique, vous pouvez utiliser:

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

Si je supprime le mot-clé 'static' du callba La fonction ck (DownloadStringCallback), j'obtiens une erreur disant: Une référence d'objet est requise pour le champ, la méthode ou la propriété non statique DownloadStringCallback. – Freakishly