Windows Phone页面导航

All*_*ang 4 .net c# silverlight windows-phone-7

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

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

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

从互联网上查询和下载图像,所以在其OnNavigateTo处理程序中,我检查页面堆栈,如果从第1页导航,我将进行下载.在此页面的应用栏中,我有一个可以导航到page3的按钮.

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

从第3页导航到第2页时,我不希望再次下载任何内容.所以想知道是否有人对此有好感.

谢谢.

Sha*_*rot 5

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

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

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

从第1页开始:

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

和第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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 关注静态/全局属性.应用程序墓碑时它们不会持久存在.确保定期保存全局数据(或至少在应用程序事件中保存) (3认同)