ここで OnNavigatedTo メソッドに関連する多くの質問を見てきましたが、「どの時点でデータをロードする必要があるか」という基本的な質問に答えているものはないようです。私が知る限り、MSDN のドキュメントはこの質問に明示的に答えていません。
ローカル データベースからデータのリストをロードする必要がある場合、どの方法を使用するのが最も適切ですか? OnNavigatedTo メソッドまたは Loaded イベントを使用する必要がありますか?
私がこれまで使ってきたのはこのパターンで、うまくいくようです:
protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
if (NavigationMode.New == e.NavigationMode) {
var data = LoadData();
this.DataContext = data;
}
}
これが意味することは、ページの新しいインスタンスの場合、データを同期的にロードするということです。これは、データの読み込みが終了し、プロファイラーが UI スレッド時間を使いすぎていると報告するまで、ページがレンダリングされないことも意味します。
別のアプローチは次のパターンです。
protected override async void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
if (NavigationMode.New == e.NavigationMode) {
var data = await LoadData();
this.DataContext = data;
}
}
しかし、このパターンでは、データをロードして DataContext を設定する前に、ナビゲーション、つまりページのレンダリングが発生する可能性があるように思えます。つまり、不要な再描画などです。