目前,我正在构建一个C#库,它将用于不同的WPF应用程序。这样的库应该测试得好,所以我特别使用MVVM和Mvvm Light。 MvvM Light有一个简单的IOC,它在ViewModelLocator类的静态cstor中初始化(至少在开箱即用时)。当我运行我的库时,会调用此静态cstor。但是,当从名为MyProject的其他WPF项目引用库时,不会执行初始化。唯一的解决方法是在MyProject中使用ViewModelLocator,但这对MyProject造成了不可接受的限制。有没有办法让非启动项目中的ViewModelLocator的静态cstor被触发?
这个问题并不新鲜,我在SO上发现了类似的配方,例如: MVVMLight within another MVVMLight project和Register viewmodel in different project from main project viewmodellocatoe in mvvmlight。 但是,在这两种情况下都没有提出任何答案,现在我想知道有新见解的人是否可以帮忙。
日Thnx
答案 0 :(得分:1)
这是一个猜测,但这里...... [/ p>
ViewModelLocator和View之间的链接位于XAML文件中,通常是通过静态资源。以下是我的一个项目中该资源的定义:
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:Rcl.Reports.DataModelManager.ViewModel" />
</Application.Resources>
Nore需要ViewModelLocator的完整命名空间路径。当MVVM自行安装时会生成它,并假设ViewModelLocator将在您已安装它的主WPF项目中(并且您需要安装它,因为项目将直接使用MVVMLight)。 / p>
如果您的名称空间错误,而不是您的库名称,那么WPF无法找到它,并且会默默地做任何事情。
检查命名空间是否正确定义,看看会发生什么。