如何在单独的库

时间:2017-06-12 22:25:35

标签: wpf mvvm prism autowired viewmodellocator

我的项目

  1. student.shell.client
  2. student.views
  3. student.viewModels
  4. Modules.student
  5. student.views具有student.viewModels引用,在stuent.views中使用ViewModelLocator.AutoWireViewModel= true,它没有解析视图模型。在不同项目中查看和查看模型不是一个好习惯。 如何在这里连接视图和查看模型?

2 个答案:

答案 0 :(得分:3)

是的,您可以将ViewModel放在单独的程序集中,只需告诉ViewModelLocator有关用于查找它们的新规则。在本博客中,您可以看到如何更改约定以使用您自己的约定:

http://brianlagunas.com/getting-started-prisms-new-viewmodellocator/

非常简单!

BTW @R。 Richards,Prism在自动解析VM时使用DI,并且所有依赖关系都将在没有问题的情况下解决,并且不会注入View ctor。这样,View项目甚至不必引用ViewModel项目。只要所有程序集都加载到AppDomain中,它就可以正常工作。

答案 1 :(得分:0)

您是否真的需要视图和视图模型的单独程序集?可能不是。如果要使用视图模型定位器,那么最简单的方法是使它们位于同一个项目/程序集中。

无论是那个,还是后面的视图代码中的视图模型。如果您的视图模型没有任何依赖关系,这将正常工作。有些人对此不以为然,因为视图和视图模型之间的耦合相当紧张。

public partial class StudentView : UserControl
{
    public StudentView()
    {
        InitializeComponent();
        DataContext = new StudentViewModel();
    }
}

或者,您可以让IoC容器在views contructor中提供视图模型。

public partial class StudentView : UserControl
{
    public StudentView(StudentViewModel viewModel)
    {
        InitializeComponent();
        DataContext = viewModel;
    }
}

第二个选项(IoC)是一个更好的选择,因为您的视图模型可能也具有容器可以提供的依赖关系。

希望这有帮助。