4

我正在开发一个 Windows Phone 应用程序,这是我遇到问题的场景:

所以我有三页,我们称之为第 1、2、3 页。

在第 1 页中,我有一个名为start downloading. 单击按钮并使用NavigateService.Navigate(page2Uri)并导航到 page2。

第 2 页进行查询并从 Internet 下载图像,因此在其OnNavigateTo处理程序中,我检查页面返回堆栈,如果它是从第 1 页导航的,我将进行下载。在此页面的应用栏中,我有一个可以导航到 page3 的按钮。

第 3 页是一个选项列表,这些选项将对第 2 页中下载的图像执行某些行为。一旦我选择了一个选项,我想回到第 2 页并在加载的图像上执行一些行为。
问题来了:
如果我NavigateService.Navigate(page2Uri)从 page3 导航到 page2,它将再次调用 Page2 构造函数和OnNavigateTo处理程序,这将导致它丢失它已经获得的每个实例变量。
但是如果我使用NavigatService.GoBack它会回到page2,然后意识到backstack top entry是page1(因为page1 -> page2 -> page3)。所以它会再次重新下载所有内容。

当将表单第 3 页导航回第 2 页时,我不希望再次下载任何内容。所以想知道是否有人对此有好主意。

谢谢你。

4

3 回答 3

5

您可以使用查询参数和 NavigationEventArgs 来提供帮助。

首先,您可以使用 NavigationEventArgs 通过检查 NavigationMode 来确定用户是前进还是后退。

其次,您可以使用查询参数告诉第2页下载。

从第1页:

private void MoveToPage2FromPage1()
{
    NavigationService.Navigate(new Uri("/Page2.xaml?shouldDownload=true", UriKind.Relative));
}

和第2页:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.NavigationMode == NavigationMode.Back) return;

    string shouldDownload = ""; //May not be needed if you'll only ever go to page 2 from page 1 to download...
    if (NavigationContext.QueryString.TryGetValue("shouldDownload", out shouldDownload))
    {
        Convert.ToBoolean(shouldDownload);
    }
}
于 2012-08-07T19:05:34.590 回答
2

有几种方法可以将数据传递到另一个页面:

  • 您可以按照 Shawn 的建议使用查询参数。
  • 您可以使用存储在 app.cs 中的全局数据
  • 您可以使用静态类来保存数据。
  • 您可以使用共享的 viewModel 来保存参数。(或视图模型中的静态属性)

这一切都取决于具体情况。我认为 Shawns 关于使用查询参数的建议可能是最“正确”的 MVVM 方式,但其他方法也有它们的位置。

于 2012-08-08T05:04:57.630 回答
0

您需要实现以下功能和导航服务。这些代码肯定会解决你的问题

对于两个或更多参数,请使用此代码

String download="true";
String file="image";
NavigationService.Navigate(new Uri("/Page3.xaml?download="+download+"&file="+file+"", UriKind.Relative));

OnNavigatedTo,将以下代码添加到您的 Page2

 protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            String download=NavigationContext.QueryString["download"];  
          String file=NavigationContext.QueryString["file"]; 

        }

对于上面的 OnNavigatedTo 函数输出 true 和 image。您可以使用MessageBox.Show();输出

于 2016-07-15T08:22:37.907 回答