在Code Behind事件中调用View Model方法会破坏MVVM吗?

Séb*_*ien 11 c# wpf mvvm

我想知道这是否会破坏MVVM模式,如果是这样,为什么以及为什么这么糟糕呢?

WPF:

<Button Click="Button_Click" />
Run Code Online (Sandbox Code Playgroud)

代码背后:

private void Button_Click(object sender, RoutedEventArgs e)
{
    ViewModel.CallMethod();
}
Run Code Online (Sandbox Code Playgroud)

查看型号:

public void CallMethod()
{
    // Some code
}
Run Code Online (Sandbox Code Playgroud)

恕我直言,它使代码背后非常简单,视图模型仍然对视图和代码背后不可知,对视图的更改不会影响业务逻辑.

在我看来比Commands或更简单明了CallMethodAction.

我不想要那种答案"它不应该如何完成".我需要一个恰当而合乎逻辑的理由,说明为什么这样做会导致维护或理解问题.

BTo*_*TKD 11

不,这完全没问题.

View的工作是处理用户输入并与ViewModel交互.按钮单击事件处理程序(在调用中调用ViewModel的方法)完全属于此角色.

您发布的内容是干净,可读,高效,可维护,完全符合MVVM设计模式的精神.

现在,从更一般的意义上讲,您真正想要问的是:"为什么选择ICommands,而不是MVVM的事件处理程序?" 那么,你肯定不会 | | 第一.

  • @SledgeHammer我完全不同意.视图可以在代码隐藏或XAML中实现,这没关系.MVVM的关键在于"视图了解ViewModels,但ViewModel不了解VIews." 耦合是单向的,这意味着ViewModel是完全可移植和可重用的,而Views则不是. (3认同)