【发布时间】:2016-10-21 07:27:07
【问题描述】:
我想知道这是否会破坏 MVVM 模式,如果是,为什么会如此糟糕?
WPF:
<Button Click="Button_Click" />
代码隐藏:
private void Button_Click(object sender, RoutedEventArgs e)
{
ViewModel.CallMethod();
}
查看模型:
public void CallMethod()
{
// Some code
}
恕我直言,它使背后的代码非常简单,视图模型仍然不知道视图和背后的代码,并且视图的更改不会影响业务逻辑。
在我看来,它比Commands 或CallMethodAction 更简单明了。
我不想要“这不是应该怎么做”的那种回答。我需要一个适当且合乎逻辑的理由来说明为什么这样做会导致维护或理解问题。
【问题讨论】:
-
您通常会将 Button 的
Command属性绑定到执行该方法的视图模型中的ICommand属性。但是,按照您在此处显示的方式进行操作不会破坏任何内容。 -
视图与视图模型的交互尽可能像鸭子类型是很好的。在某些情况下,您希望能够将给定视图与两个不相关的视图模型一起使用,这些视图模型恰好具有相同名称和类型的属性,它们都可以与它们绑定的控件一起使用。但很多时候,视图是高度专业化的,这不会成为考虑因素。在这些情况下,强类型的
ViewModel属性是常见的做法。每个视图模型的多个视图比每个视图多个不相关的视图模型更常见。