我有一个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
的原因是因为该项目是一个ClassLibrary,并且我没有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()
的性质是什么?它真的是异步的吗?我在想,也许你的数据库服务以某种方式阻塞了UI线程。需要更多信息。 - Decade Moon