Я видел много вопросов, связанных с методом OnNavigatedTo, но ни один из них, похоже, не ответил на основной вопрос: «В какой момент я должен загружать данные?» Насколько я могу судить по документации на MSDN, явным образом не отвечаю на этот вопрос.Когда я должен загружать данные в приложение Windows Phone 8?
Если мне нужно загрузить список данных из локальной базы данных, какой метод наиболее подходит для использования? Должен ли я использовать метод OnNavigatedTo или событие Loaded?
Что я использую до сих пор эта картина, которая, кажется, работает хорошо:
protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
if (NavigationMode.New == e.NavigationMode) {
var data = LoadData();
this.DataContext = data;
}
}
Что это означает, что для нового экземпляра страницы, загружать данные синхронно. Это также означает, что страница не будет отображаться до тех пор, пока данные не закончит загрузку, а профилировщик жалуется, что я использую слишком много времени для потока пользовательского интерфейса.
Альтернативный подход заключается эта картина:
protected override async void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
if (NavigationMode.New == e.NavigationMode) {
var data = await LoadData();
this.DataContext = data;
}
}
Но с этим рисунком, мне кажется, что навигация, и поэтому рендеринг страницы может происходить до загрузки данных и установить DataContext, то есть ненужными перекраски и что-нет.
Но если я загружаю данные только из локальной базы данных, где время для загрузки данных очень короткое, все же желательно показать экран «Загрузка ...»? Я не уверен, что очень короткая вспышка экрана загрузки предпочтительнее в этом случае. –
Всегда ли это очень короткое время, и как короткий «очень короткий»? Если мы говорим о 100 мс, вы можете пропустить индикатор прогресса и просто обработать его async, не показывая никакого прогресса. – vonLochow