[英]Load items asynchronously to a ListView after navigation to Page Windows Phone 8.1
我有一个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();
并非完全异步,这就是导致问题的原因,因此只要您保证数据库调用是异步的,上述实现就可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.