2

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

最后一切都重新开始工作,通常这就是它的结束。

但它每次都会发生。

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

编辑:我终于找到了实际的异常:

GalaSoft.MvvmLight.Extras.DLL 中出现了“Microsoft.Practices.ServiceLocation.ActivationException”类型的第一次机会异常

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

4

1 回答 1

0

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

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

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

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

于 2015-06-25T18:05:32.763 回答