私が作成しているアプリは、最初のページ(MainView.xaml)に移動する前に、jsonRESTサービスからデータを取得する必要があります。ビューモデルのリクエストを行うコントローラークラスには、後でビューモデルのRESTリクエストを生成するために使用するID(前回の実行以降に変更された可能性があります)のマッピングに役立つ静的リストがいくつかあります。MainViewが初期化されると、すぐにこのコントローラークラスから情報が呼び出されますが、IDマッピングがまだロードされていないため、失敗します。したがって、代わりにLoadingScreenというビューをロードします。このビューは、IDをマップするコントローラーのメソッドを実行し、その後、アプリケーションのビューをMainViewにナビゲートします。
public LoadingScreen()
{
Dispatcher.BeginInvoke(TVController.populateMaps);
InitializeComponent();
}
IDをマッピングした後、コントローラーはこれを行います
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/View/MainView.xaml", UriKind.Relative));
});
ただし、次の2つの理由から、一時的なビューは避けたいと思います。
- 戻るボタンを押すと、ユーザーは後でこのページに移動します
- それは悪いコーディングです。SplashScreen画像を改ざんするだけでいいのですが。
私はこれを行う別の方法を検討してきましたが、WMAppManifest.xmlによるLoadingScreen(App.xaml.cs内)へのデフォルトのタスクナビゲーションを防ぐことができました。しかし、コントローラークラスのブレークポイントは、App.xaml.csから実行したときに、PopulateMapsメソッドと非同期リクエストで何も行われていないことを示唆しているようです。これは、とりわけ私が試したことです。
public App()
{
//INITIALIZING THE ELEMENTARY STUFF .......
RootFrame.Navigating += new NavigatingCancelEventHandler(RootFrame_Navigating);
}
void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
e.Cancel = true;
TVController.populateMaps();
}
私が見つけたいのは、一時的なロード画面が表示されないようにする方法です。