【问题标题】:MvvmLight ViewmodelLocator StaticResource stops loadingMvvmLight ViewmodelLocator StaticResource 停止加载
【发布时间】:2015-08-28 01:29:55
【问题描述】:

每当我使用 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

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

【问题讨论】:

    标签: mvvm-light staticresource app.xaml viewmodellocator


    【解决方案1】:

    原来问题在于我注册具有依赖关系的视图模型的顺序。我有一个初始化 ViewModel 的基本 ViewModelLocator,以及一个包含平台特定代码的继承 ViewModelLocator...

    在其中一个 ViewModel 的构造函数中,我引用了一种依赖类型,该类型将在设计时实例中注册。但由于这是运行时(在到达派生平台视图模型定位器之前不会注册),因此引用为空。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-08
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2010-12-22
      相关资源
      最近更新 更多