MVVM限制Code Behind?

时间:2012-05-28 06:30:27

标签: wpf mvvm code-behind

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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

修改

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

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

编辑2

在View处理中,事件应该只做两件事:更改View本身或使用绑定更改某些内容来通知ViewModel。通过在ViewModel上实现INotifyPropertyChanged,可以通知ViewView中ViewModel的变化。

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

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

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

Microsoft已在Blend SDK中提供了该实现。 From this article

... 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>

And a discussion about commands versus event triggers