MvvmLight ViewmodelLocator StaticResource停止加载

时间:2015-06-12 06:04:55

标签: mvvm-light staticresource app.xaml viewmodellocator

每当我使用MVVM Light时,我都会遇到最奇怪的事情。我创建一个ViewModelLocator并在app.xaml中注册为静态资源:

<viewmodel:WindowsViewModelLocator x:Key="ViewModelLocator" />

一切正常,这意味着在启动时静态资源已注册,我可以使用它,我可以通过转到

看到它
App.Current.Resources["ViewModelLocator"]

然后突然,随机,永久地停止工作。我在每一个项目上都发生过这种情况,但我还没有确定原因,因为我无法确定我为使其停止工作而采取的一致行动,也无法找出任何方法将其恢复为任何形式。是我工作的时候......

继续前进的唯一方法是在启动时手动注册资源,如下所示:

if (!Resources.ContainsKey("ViewModelLocator") || Resources["ViewModelLocator"] == null) Resources.Add("ViewModelLocator", new WindowsViewModelLocator());

最后一切都开始工作了,通常就是结束了。

但它每隔一段时间就会发生。

我在定位器的构造函数中设置了一个断点,它肯定没有被击中......任何人都知道我可能做错了什么?

编辑:我终于找到了实际的例外:

  

类型的第一次机会异常   发生了'Microsoft.Practices.ServiceLocation.ActivationException'   GalaSoft.MvvmLight.Extras.DLL

这让我找到了我在下面发布的答案。谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明问题是我注册具有依赖项的视图模型的顺序。我有一个初始化ViewModel的基本ViewModelLocator,以及一个包含特定于平台的代码的继承ViewModelLocator ......

在其中一个ViewModel的构造函数中,我引用了一个依赖类型,它们将在设计时实例中注册。但由于这是运行时(在它到达派生平台viewmodellocator之前没有注册),引用为null。

我将依赖代码从构造函数中移出到一个更合适的位置,似乎可以修复它!

长话短说:如果您遇到此问题,请确保按照正确的顺序和正确的位置正确初始化所有内容!