导航到Page Windows Phone 8.1后,将项目异步加载到ListView

本文关键字:项目 异步 加载 ListView Windows Page Phone 导航 | 更新日期: 2023-09-27 18:27:47

我有一个Windows Phone 8.1应用程序,其中有一个导航到PageTwo.xaml的按钮。在PageTwo.xaml.cs中,在后面的代码中,我有这样的东西:

string type = "";
protected override void OnNavigatedTo(NavigationEventArgs e) {
    type = e.Parameter.ToString();          
}
private void Page_Loaded(object sender, RoutedEventArgs e) {
    PageTwoListViewModel pageTwoListViewModel = ViewModelLocator.PageTwoListStatic;
    this.DataContext = pageTwoListViewModel;
}

我之所以在Page_Loaded事件中设置DataContext,是因为该项目是一个类库,并且我没有App.xaml文件,但这不会影响与我的问题有关的任何内容

然后在我的PageTwoViewModel中,我有以下内容:

public RelayCommand PageLoadedCommand { get; private set; }
public PageTwoListViewModel() {
    this.PageLoadedCommand = new RelayCommand(PageLoaded);
}
private void PageLoaded() {
    LoadList();
}
private async void LoadList() {
    ObservableCollection<MyListModel> _list = await DatabaseService.GetList();
    MyViewList = _list;
}

负责触发PageLoadedCommand的代码是:

<Page (...)>
    <i:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="Loaded">
            <core:InvokeCommandAction Command="{Binding PageLoadedCommand}">
            </core:InvokeCommandAction>
        </core:EventTriggerBehavior>
    </i:Interaction.Behaviors>
</Page>

这里的问题是OnNavigatedTo和两个Page_Loaded事件都在页面可见之前运行,所以如果我有一个大列表要填写,只有在所有操作完成后,它才会转到PageTwo.xaml,从而冻结应用程序
我想做的是导航到PageTwo.xaml,然后启动一个加载动画并异步填充我的ListView。我该怎么做?

导航到Page Windows Phone 8.1后,将项目异步加载到ListView

事实证明,我的问题来自一件相当愚蠢的事情。我的DatabaseService.GetList();并不是完全异步的,这就是问题的原因,所以只要保证数据库调用是异步的,上面的实现就可以正常工作。