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