当前,我正在构建一个C#库,该库将在不同的WPF应用程序中使用。应该很好地测试这样的库,因此我特别使用MVVM和Mvvm Light。MvvM Light具有一个简单的IOC,该IOC在类ViewModelLocator的静态cstor中初始化(至少在开箱即用时使用)。当我运行我的库时,将调用此静态cstor。但是,当从另一个名为MyProject的WPF项目中引用库时,不会执行初始化。唯一的解决方法是在MyProject中具有ViewModelLocator,但这对MyProject造成了不可接受的限制。有什么办法可以触发非启动项目中ViewModelLocator的静态cstor?
这个问题不是新问题,我在SO上找到了类似的表述,例如另一个MVVMLight项目中的MVVMLight以及与mvvmlight中的主项目viewmodellocatoe不同的项目中注册了viewmodel。但是,在两种情况下都没有提出答案,现在我想知道是否有新见识的人可以帮忙。
n
这有点猜测,但是这里...
ViewModelLocator和View之间的链接通常位于XAML文件中,通常通过静态资源。这是我的一个项目中资源e的定义:
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:Rcl.Reports.DataModelManager.ViewModel" />
</Application.Resources>
不需要ViewModelLocator的完整名称空间路径。当MVVM自行安装时,它会生成该文件,并假定ViewModelLocator将在您安装了它的主WPF项目中(并且需要在其中安装它,因为该项目将直接使用MVVMLight)。
如果您使用的是错误的名称空间,而不是您的库之一,则WPF找不到它,并且将无提示地执行任何操作。
检查名称空间是否正确定义,然后看看会发生什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句