我使用的是MVVM Light,除了将Windows Phone 8.1 WinRT应用程序作为共享目标启动外,一切都很好。
当我尝试分配MainViewModel viewModel = ServiceLocator.Current.GetInstance<MainViewModel>();
时,我得到ServiceLocator.Current的异常。
异常消息:必须设置ServiceLocationProvider。
我是否需要在App.xaml.cs OnShareTargetActivated事件中做一些额外的事情以确保定位器正在运行?
更新:
ShareTarget页面需要被视为您应用的一个小扩展。似乎并未加载所有应用程序的资源(包括App.xaml中的应用程序范围的资源)。所以我刚刚在共享页面的构造函数中创建了一个新的MainViewModel实例,只加载了共享完成所需的东西,保存信息并调用ShareOperation.ReportCompleted
。这会将用户返回到正在共享的应用程序。
我仍然没有找到一个很好的解决方案,可以在我的ViewModel中获取其他资源,但现在可以使用。
答案 0 :(得分:3)
这表示尚未执行以下行:
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
此行将指示ServiceLocator类将SimpleIoc.Default实例用作其ServiceLocator.Current。当您将应用程序作为共享目标运行时,初始化略有不同,可能ViewModelLocator未初始化。在使用ServiceLocator之前,您需要找到一个好的位置来执行初始化。
干杯 劳伦