我刚刚阅读了有关MVVMC模式的this文章。现在我有一个问题。是应该将Controller注入ViewModel,还是将ViewModel注入Controller?
答案 0 :(得分:8)
MVVMC只是一个MVC,其中View被ViewModel对替换。
我已根据MSDN上熟悉的Josh Smith样本汇总了一个简单的示例...我已经介绍了一个控制器。
答案 1 :(得分:5)
这取决于你在做什么。我猜想大多数时候Controller都不需要注入,但如果需要,它更有可能在ViewModel中需要。让我解释一下。
你在对控制器做什么?你必须做某事......如果那个“某事”只与“数据看起来像什么”有关,那么它就属于视图。如果它与“向用户显示的内容”相关,则它属于ViewModel。
我正在将一个控制器注入我的一个ViewModel中。我的ViewModel表示在View中绘制的数据。我有一个命令可以将数据项从当前图形移动到新图形。由于这会改变“图形窗口中显示的内容”,因此我在ViewModel中实现了该命令。 ViewModel从其自己的项集合中删除数据项,然后使用Controller请求为该新数据创建新视图(它已具有此功能)。
查看文章,我看不到控制器和视图之间的箭头
答案 2 :(得分:0)
ViewModel是View和Controller之间的契约,理想情况下也不需要知道(依赖于)。
所以我绝对不会将Controller注入ViewModel。
我不确定我是否会做相反的事情:控制器通常负责创建新的ViewModel实例。如果你想要一个更松散耦合的实现,你可以将一个抽象工厂注入到Controller中,以避免直接创建ViewModel类的新实例。
答案 3 :(得分:0)
我相信Controller 应该作为抽象IController注入。 ViewModel需要IController才能导航到不同的View / ViewModel。
例如,在ViewModel中:
IController _controller;
public MyViewModel(IController controller){
_controller = controller;
}
void NavigateHome();
{
_controller.NavigateHome();
}
抽象IController比注入Controller本身更好:出于以下原因:
我开发了一个用于在WPF中执行MVVMC的轻量级框架。 它与Asp.NET Core中的MVC有很多相似之处。
如果您正在寻找WPF解决方案,请查看它。
包含文档的博文: http://michaelscodingspot.com/2017/02/15/wpf-page-navigation-like-mvc-part-2-mvvmc-framework/