我正在制作一个 UWP 应用程序,我在其中导航到具有列表视图的页面。 在构造函数中,我调用一个异步函数来设置列表视图的项源。数据存储在本地,但这需要一些时间来筛选和排序列表。尽管我调用了一个异步函数,但在设置列表视图的项源之前,不会进行导航。
public FriendsPage()
{
this.InitializeComponent();
RefreshListViews();
}
//I tried both these versions: in the first one,
//the app clearly takes one extra second to navigate to the page.
private async void RefreshListViews(){
await Task.Delay(1000);
Listview.ItemsSource = …;
}
private async void RefreshListViews(){
await Dispatcher.RunAsyn(Windows.UI.Core.CoreDispatcherPriority.Normal,() => {
Listview.ItemsSource = …;
});
}
我该如何解决此问题,以便应用程序首先导航,然后过滤/排序/填充列表视图?
您在FriendsPage
的构造函数中添加了额外的逻辑,这是昂贵的,因为它会延迟页面的视觉呈现,即使此类操作"将"以非阻塞方式执行。
溶液?处理将此代码运行到内置Page
类中的事件以及处理导航到该类的事件的责任。该事件为 OnNavigatedTo,当Frame
锁定FriendsPage
具有其当前页面时调用该事件。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// Refresh List Views
}
在同一篇文章中,您可以检查可能想要改用Loaded
事件的情况。
我还建议不要创建即发即弃的异步方法,而是更改异步操作的签名以返回可等待的 o:
private async Task RefreshListViews()
{
// Do stuff
}
并等待它在导航事件上执行!