首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MvvmLight ViewmodelLocator StaticResource停止加载

MvvmLight ViewmodelLocator StaticResource停止加载
EN

Stack Overflow用户
提问于 2015-06-12 06:04:54
回答 1查看 528关注 0票数 2

每当我使用MVVM时,我总是会经历最奇怪的事情。我创建一个ViewModelLocator并将其注册为app.xaml中的静态资源:

代码语言:javascript
复制
<viewmodel:WindowsViewModelLocator x:Key="ViewModelLocator" />

所有操作都很好,这意味着在启动时注册了静态资源,我可以使用它,我可以通过

代码语言:javascript
复制
App.Current.Resources["ViewModelLocator"]

但是突然,随机的,永久的,这个停止工作了。我在每一个项目上都遇到过这种情况,但我还没有弄清楚为什么,因为我不能确定我为使它停止工作而采取的一致行动,我也无法想出任何办法让它恢复到我工作时的状态.

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

代码语言:javascript
复制
if (!Resources.ContainsKey("ViewModelLocator") || Resources["ViewModelLocator"] == null) Resources.Add("ViewModelLocator", new WindowsViewModelLocator());

最后,一切又开始运作了,通常这就是它的结束。

但它每次都会发生。

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

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

'Microsoft.Practices.ServiceLocation.ActivationException‘类型的首次异常在GalaSoft.MvvmLight.Extras.DLL中发生

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 18:05:32

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

在其中一个ViewModels的构造函数中,我引用了依赖类型之一,该类型将通过设计时实例注册。但是,由于这是运行时(在到达派生平台视图建模器之前不会注册),所以引用为null。

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

长话短说:如果你有这个问题,确保你是正确地初始化所有正确的顺序和地点!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30796272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档