6

您好,
我正在使用 xaml 和 c# 编写一个简单的 Windows 8 应用程序。我正在使用 VS 2012 模板创建页面,包括导航系统。

我正在加载大量数据,因此我决定添加一个带有 ProgressRing 的加载页面,并在加载数据完成后导航到第一个应用程序页面:

//loading page
protected async override void OnNavigatedTo(NavigationEventArgs e) {
...
await topCookerManager.GetBlogsAsync();
this.Frame.Navigate(typeof(MainPage));
...
}

它在应用程序启动时运行良好,但是当我在应用程序的第一页上并且当我单击后退按钮时,我会重定向到加载页面。因此,在加载页面中,我正在检查是否加载了数据,如果是,我将重定向到第一页。

if (dataManager.Blogs != null && dataManager.Blogs.Count > 0)
this.Frame.Navigate(typeof(MainPage));

**这就是问题**:我无法从这一点开始导航。导航方法返回 false !我已经测试了 *GoFormard* 方法,它没有抛出异常,但导航没有完成,我停留在加载页面上......

你能告诉我我的错误在哪里吗?或者如何实现加载页面。
谢谢你的帮助。

4

1 回答 1

16

您不能Navigate在该OnNavigatedTo方法中使用,因为之前的导航方法此时仍在执行。相反,您可以通过调度程序运行新的导航调用来等待它被加载。

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
     //your other code
     //...
     Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
                            () => Frame.Navigate(typeof(MainPage))); 
}

它可能在您的代码中第一次工作的原因是因为您正在等待一些时间来加载博客。在这段时间内,导航方法已完成加载,因此可以再次调用它。

话虽如此,请考虑您是否真的想要一个加载页面,而不仅仅是评论中提到的 Xyroid 某种覆盖。

于 2013-04-01T12:44:53.320 回答