MVVM中的依赖项

MVVM中的依赖项,mvvm,dns,dependencies,Mvvm,Dns,Dependencies,我刚刚开始深入研究WPF的MVVM模式,但由于我不是一名专业的开发人员,我有时会感到有点迷茫 我面临的主要问题是决定谁应该创建谁:假设我有一个存储狗和猫的数据库。然后我会有一个数据库管理器,它与数据库(工作单元!?)、DogRepository/CatRepository和Dogs/Cats对象进行通信 另一方面,我有一个主窗口,用户可以用它打开/关闭数据库,其中包含一个猫的列表框和一个狗的列表框,因此我需要一个主窗口视图模型、CatsViewModel和DogsViewModel 但是如何创建

我刚刚开始深入研究WPF的MVVM模式,但由于我不是一名专业的开发人员,我有时会感到有点迷茫

我面临的主要问题是决定谁应该创建谁:假设我有一个存储狗和猫的数据库。然后我会有一个数据库管理器,它与数据库(工作单元!?)、DogRepository/CatRepository和Dogs/Cats对象进行通信

另一方面,我有一个主窗口,用户可以用它打开/关闭数据库,其中包含一个猫的列表框和一个狗的列表框,因此我需要一个主窗口视图模型、CatsViewModel和DogsViewModel

但是如何创建这些对象呢?在我的应用程序中,我创建了主窗口。然后?我是创建MainWindowViewModel并将其传递给MainWindow,还是MainWindow创建自己的MainWindowViewModel?数据库管理器是如何创建的?通过主窗口查看模型


CatsViewModel和相应的CatRepository如何?MainWindowViewModel是否创建CatsViewModel,而CatsViewModel又会创建CatRepository?我真的很困惑。

你很困惑,因为所有这些选项都是有效的。如果您没有使用依赖项注入,并且ViewModels拥有自己需要的所有信息,那么没有理由不让视图创建viewmodel(通常通过视图的StaticResource创建一个):

<Window.Resources>
     <local:CatViewModel x:Key="catVM" />
</Window.Resources>
<Grid DataContext="{StaticResource catVM}">
...
</Grid>
最后一个选项是第三方的概念,该第三方同时创建视图和viewmodel(不过是适当的),并将它们从外部结合起来。通常这称为presenter

在任何情况下,所有这些都是有效的选项。你应该选择最适合你的选项。我肯定会有人来声称亵渎神明,但这实际上取决于你的需要和你的项目。

视图模型(MVVM)模式没有定义谁负责创建不同的类。因此,在MVVM社区中可以找到许多不同的方法

我喜欢使用应用程序控制器或用例控制器来处理应用程序的工作流程,因此它们负责创建ViewModel和Repository类

项目的ViewModel示例中显示了此操作的具体示例:

WPF应用程序框架(WAF)


谢谢你的解释。我花了一段时间才熟悉WPF和MVVM,现在我可以感谢你的回答了。
public CatView(CatViewModel vm) : this()
{
     this.DataContext = vm;
}