由于listview导航速度慢

时间:2018-06-01 16:50:22

标签: c# listview uwp navigation

我正在制作一个UWP应用,我导航到一个带有列表视图的页面。 在构造函数中,我调用异步函数来设置listview的itemsource。数据存储在本地,但这需要一些时间来过滤和排序列表。虽然我调用异步函数,但在设置listview的itemsource之前不会进行导航。

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 = …;
    });
}

如何修复此问题,以便应用首先导航然后过滤/排序/填充列表视图?

1 个答案:

答案 0 :(得分:1)

您正在FriendsPage的构造函数中添加额外的逻辑,这是昂贵的,因为它会延迟页面的可视化呈现,即使此类操作“将”以非阻塞方式执行。

解决方案?将运行此代码的责任交给Page类内置的事件,并处理它的导航。该事件为OnNavigatedTo,并在Frame锁定FriendsPage时显示其当前页面。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
      // Refresh List Views
}

在同一篇文章中,您可以检查您可能希望使用Loaded事件的情况。

我还建议不要创建一个即发即弃的异步方法,而是改变异步操作的签名,而不是返回一个等待的o:

private async Task RefreshListViews()
{
   // Do stuff 
}

等待在导航事件上执行