私のUWPアプリの開発中、私は気づいていて奇妙なことを説明しています。UWPアプリのMerge ResourceDictionaryの初期化
IユーザーMvvmLight及びIはApp.xamlにMergedDictionaries
から参照する別のResourceDictionary Core.xamlにViewModelLocatorリソースインスタンスを追加することを決定しました。続き はApp.xamlの内容です:Core.xamlの
<Application ...>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/Core.xaml" />
<ResourceDictionary Source="Resources/Converters.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
内容:
<ResourceDictionary ...>
<viewModel:ViewModelLocator x:Key="Locator" />
</ResourceDictionary>
今、私はCore.xaml内のリソースがInitializeComponent
時に初期化されているはずメソッド呼び出しをApp.xaml.csで呼び出しましたが、ServiceLocator
クラス(ViewModeのコンストラクタで設定されています)を使用しようとしましたが、このように - - - ServiceLocator.Current.GetInstance<INavigationService>().Navigate<MainViewModel>();
MvvmLightでlLocator)私が言った例外を取得:
An exception of type 'System.InvalidOperationException' occurred in
Microsoft.Practices.ServiceLocation.dll but was not handled in user code
Additional information: ServiceLocationProvider must be set.
確かに私はViewModelLocatorのコンストラクタにブレークポイントを置いた場合のウィンドウがアクティブになる前に、それは呼び出されません。さらに興味深いことに、ロケータリソースキーを手作業で参照すると(例えば、Debug.WriteLine(Resources["Locator"]);
をServiceLocator
の呼び出しの上に置く)、すべて正常に動作します。同じように、ViewModelLocator
リソースをApp.xamlに直接移動すると、IntializeComponent
の間にインスタンス化されます。
UWPアプリケーションにマージされたリソースディクショナリの遅延インスタンス化はありますか?それとも、なぜこのように振舞うのでしょうか?
この奇妙な動作は、ResourceDictionaryにいくつかの通常の(スタイルではない)オブジェクトがある場合に発生することがわかりました。 1つのViewModelLocatorだけが完全に動作し、ctorが呼び出されていること。私の発見http://stackoverflow.com/questions/34466035/uwp-resourcedictionary-is-not-being-loaded-when-i-add-a-second-object-to-it –