1

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

4

1 回答 1

6

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

它所提倡的是 View 应该只依赖于 ViewModel(以及 Model 上的 ViewModel)

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

仅查看相关内容的代码是可以的

使用后面的代码时你失去的东西是该代码的简单(单元)测试。

编辑

MVVM 世界中的一个常见表达是“仅 XAML”。尽管我喜欢一个简短、活泼的陈述,但它往往会偏离 MVVM 试图解决的实际问题以及它试图解决它的方式。

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

编辑 2

在处理事件的视图中应该只做两件事:改变视图本身或使用绑定通知视图模型发生了变化。应通过在 ViewModel 上实现 INotifyPropertyChanged 来通知 VIEW ViewModel 中的更改。

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

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>

以及关于命令与事件触发器的讨论

于 2012-05-28T06:36:01.087 回答