【发布时间】: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>
这里的问题是OnNavigatedTo 和Page_Loaded 事件在页面可见之前运行,所以如果我有一个很大的列表要填写,只有在一切完成后才会转到PageTwo.xaml,冻结应用程序。
我想要做的是导航到PageTwo.xaml,在那里,启动加载动画并异步填充我的 ListView。我该怎么做?
【问题讨论】:
-
如果你的 PageLoadedCommand 现在被触发了?
-
触发顺序为:OnNavigatedTo -> Page_Loaded -> PageLoadedCommand(PageLoaded)
-
我的意思是哪个代码准确地触发了这个命令?
-
哦,好的,没听懂。我将添加到主要问题中。
-
我们在这里讨论了多少个列表项?
DatabaseService.GetList()的本质是什么?它真的是异步的吗?我在想,也许您的数据库服务以某种方式阻塞了 UI 线程。需要更多信息。
标签: c# xaml navigation windows-phone-8.1