gpt4 book ai didi

wpf - MVVM 限制代码背后?

转载 作者:行者123 更新时间:2023-12-03 10:20:40 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

编辑

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

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

编辑 2

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

以类似的方式,ViewModel 可以通过将 ViewModel 命令绑定(bind)到 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

关于wpf - MVVM 限制代码背后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com