MVVM限制Code Behind?

PhO*_*NiX 1 wpf code-behind mvvm

在WPF中使用MVVM模型是否限制程序员编写代码?避免代码背后导致许多复杂问题,但另一方面,耦合上升成为一个问题.那么更好的是什么?

Ern*_*rno 6

MVVM模型不会限制您编写代码.

它所推动的是View应该只依赖于ViewModel(以及模型上的ViewModel)

因此,如果您编写的代码实际上是在实现ViewModel,那么您将创建从ViewModel到View的依赖关系.

代码背后只有查看相关的东西是可以的

使用代码时丢失的东西是对代码的简单(单元)测试.

编辑

MVVM世界中的一个常见表达是"仅限XAML".尽管我喜欢简短明快的声明,但它倾向于偏离MVVM试图解决的实际问题以及它如何尝试解决它.

只要您坚持使视图依赖于ViewModel和模型上的ViewModel并努力实现(单元)可测试性,您就处于正确的轨道上.

编辑2

在视图处理中,事件应该只做两件事:更改视图本身或使用已更改的绑定通知ViewModel.通过在ViewModel上实现INotifyPropertyChanged,可以在ViewModel中通知VIEW更改.

以类似的方式,ViewModel可以通过将ViewModel命令绑定到View来响应View中的事件.

WPF按钮具有可以使用的Command属性.单击按钮时执行.

如果控件没有Command属性,或者您想在引发其他事件时执行命令,那么您只需将事件转换为ICommand的执行即可.

Microsoft已在Blend SDK中提供了该实现.从这篇文章:

... xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity..."
<Slider
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="ValueChanged">
            <i:InvokeCommandAction Command="{Binding MyCommand}"
                                   CommandParameter="{Binding Text, ElementName=textBox}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Slider>
Run Code Online (Sandbox Code Playgroud)

并讨论命令与事件触发器