导航到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。我该怎么做?
事实证明,我的问题来自一件相当愚蠢的事情。我的DatabaseService.GetList();
并不是完全异步的,这就是问题的原因,所以只要保证数据库调用是异步的,上面的实现就可以正常工作。