前提として、今回のアプリでは、「Windows Template Studio 」のPrismを利用して開発をしておりました。
そうしたところ、通常のアプリ起動時に、App.xaml.cs内の自動生成された下記メソッドたちが呼ばれていることが分かりました。(デバッグをしていて気づきました。)
上から順に呼ばれています。
C#
1protected override void ConfigureContainer()
2rotected override IDeviceGestureService OnCreateDeviceGestureService()
3protected override async Task OnInitializeAsync(IActivatedEventArgs args)
4protected override async Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args)
しかし、右クリックをして、開くときに自分が書いていたコードは、一部省力しますが、下記のようになっておりました。(一般的に、ググって良く出てくるサイトに書いてある書き方です。)
C#
1protected override async void OnFileActivated(FileActivatedEventArgs args)
2{
3 base.OnFileActivated(args);
4 var rootFrame = new Frame();
5 rootFrame.Navigate(typeof(ReflectionRegisterDirectoryPage), strPhotoDetail);
6 Window.Current.Content = rootFrame;
7 Window.Current.Activate();
8}
そうした場合、上記の通常のアプリ起動時に呼ばれているはずのメソッドが呼ばれていなかったので、それらを呼ぶように、「OnFileActivated」メソッド内に追加したところ、動作するようになりました。
そして、この中の一番の肝は、「OnInitializeAsync」メソッドだと思います。
C#
1 protected override async Task OnInitializeAsync(IActivatedEventArgs args)
2 {
3 await base.OnInitializeAsync(args);
4
5 // We are remapping the default ViewNamePage and ViewNamePageViewModel naming to ViewNamePage and ViewNameViewModel to
6 // gain better code reuse with other frameworks and pages within Windows Template Studio
7 ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
8 {
9 var viewModelTypeName = string.Format(CultureInfo.InvariantCulture, "LearningAlbum.ViewModels.{0}ViewModel, LearningAlbum", viewType.Name.Substring(0, viewType.Name.Length - 4));
10 return Type.GetType(viewModelTypeName);
11 });
12 }
理由としては、ここで、ViewModelの紐づけを行っているように見えるからです。
→すみません、深く理解ができていないため、間違いなどありましたら、ご指摘お願いいたします。
よろしくお願いいたします!
全然ググっても出てこなかったので、皆さんの一助になれば幸いです。
よろしくお願いいたします。