【问题标题】:How do I navigate from one xaml page to another, and pass values?如何从一个 xaml 页面导航到另一个页面并传递值?
【发布时间】:2010-12-14 10:18:29
【问题描述】:

此处与此主题有些相关: Async XML Reading in 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(new Uri("/Result.xaml", UriKind.Relative));)?我尝试在回调中执行此操作,但由于 static 关键字,我得到了一个 nullobject 异常。如何确保已填充 finalResult,并且可以导航到 Result.xaml 并在该页面上引用 finalResult 中的数据。或者,如何将 Words 或 finalResult 传递给 Result.xaml?

感谢收看 :)

【问题讨论】:

标签: search windows-phone-7 navigation windows-phone


【解决方案1】:

这里有一个关于在页面之间传递值的演练。

How to: Perform Page Navigation on Windows Phone

【讨论】:

  • 您能否清楚地描述空对象异常发生的位置(以及在什么对象引用上)?
  • 在DownloadStringCallback 中,如果在Navigate() 之后立即调用Navigate,那么finalResult 的值是多少。您是否能够在 Navigate 上中断,找到非 null 内容并进一步执行而不会出错。如果是,并且没有断点,它会失败,是否存在与未显示的代码(字)相关的一些计时问题。
【解决方案2】:

如果你不将回调函数设为静态,你可以这样做:

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

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

Deployment.Current.Dispatcher.BeginInvoke();

【讨论】:

  • 如果我从回调函数 (DownloadStringCallback) 中删除“静态”关键字,我会收到一条错误消息:非静态字段、方法或属性 DownloadStringCallback 需要对象引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多