2010-12-14 91 views
0

一定的相关性这个话题在这里: Async XML Reading in Windows Phone 7如何从一个xaml页面导航到另一个,并传递值?

我正在开发一个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; 
在搜索类

。我的问题是,我可以在哪里放置Navigate命令(NavigationService.Navigate(new Uri(“/ Result.xaml”,UriKind.Relative));)?我试图在回调中做这件事,但由于static关键字,我得到一个nullobject异常。我如何确保已经填充了finalResult,并且可以导航到Result.xaml并在该页面上的finalResult中引用数据。或者,我如何将Words或finalResult传递给Result.xaml?

为寻找谢谢:)

+0

所以事实证明,我正在以错误的方式解决我的问题。正确的方法在这里:http://www.jaylee.org/post/2010/06/22/WP7Dev-Using-the-WebClient-with-Reactive-Extensions-for-Effective-Asynchronous-Downloads.aspx I我希望Mick的答案是正确的,因为这是我原来的问题的答案。感谢大家。 IMO – Freakishly 2010-12-16 09:27:53

+0

最好的解决办法: http://stackoverflow.com/questions/4701566/passing-a-complex-object-to-a-page-while-navigating-in-a-wp7-silverlight-applica/15536​​127 #15536​​127 – radsdau 2013-03-20 22:44:14

回答

3

有在页面之间传递值这里的演练。

How to: Perform Page Navigation on Windows Phone

+0

不错的链接,但不能解决我的问题:( – Freakishly 2010-12-16 06:29:29

+0

你能否清楚地描述空对象异常发生在哪里(以及在哪个对象引用上)? – 2010-12-16 06:45:54

+0

在DownloadStringCallback中,Navigate之前的finalResult的值是什么)如果你立即调用Navigate,你是否能够在Navigate中断,找到非null内容并且进一步执行而没有错误,如果是,并且没有断点,它会失败,是否会出现与代码有关的时间问题未显示(单词) – 2010-12-16 06:49:13

0

如果不进行回调函数静态,你可以这样做:

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

如果回调函数必须是静态的,你可以使用:

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

如果我从callba中删除'static'关键字ck函数(DownloadStringCallback),我得到一个错误说:非静态字段,方法或属性DownloadStringCallback需要对象引用。 – Freakishly 2010-12-16 05:34:43

相关问题