【问题标题】:Load items asynchronously to a ListView after navigation to Page Windows Phone 8.1导航到 Page Windows Phone 8.1 后将项目异步加载到 ListView
【发布时间】:2014-11-04 03:22:10
【问题描述】:

我有一个 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>

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

【问题讨论】:

  • 如果你的 PageLoadedCommand 现在被触发了?
  • 触发顺序为:OnNavigatedTo -> Page_Loaded -> PageLoadedCommand(PageLoaded)
  • 我的意思是哪个代码准确地触发了这个命令?
  • 哦,好的,没听懂。我将添加到主要问题中。
  • 我们在这里讨论了多少个列表项? DatabaseService.GetList() 的本质是什么?它真的是异步的吗?我在想,也许您的数据库服务以某种方式阻塞了 UI 线程。需要更多信息。

标签: c# xaml navigation windows-phone-8.1


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多