繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM