gpt4 book ai didi

c# - 我对 MVVM 模式有一些疑问

转载 作者:行者123 更新时间:2023-11-30 13:25:07 24 4
gpt4 key购买 nike

我叫 Jesús,来自西类牙,是一名 .NET 开发人员,我几天前才发现这个很棒的网站。

我有一些关于 MVVM 模式的问题,如果你能回答我会很高兴。
我三个月前开始使用 WPF,并且学习了 MVP 模式。
MVP 非常好,因为您可以很好地构建应用程序。

我开始到处看到 MVVM,但每个人都在按自己的方法使用该模式。
每个博主都在他们的 WPF 博客中谈论 MVVM,但每个实现都是不同的。

我现在专注于在 CodePlex 上使用 MVVM 工具包的实现,但我有疑问并且找不到太多信息。

我认为MVVM是MVP的一种变体。
使用 MVP,每个 View 都有一个执行 View 工作的展示器。
在 MVVM 中也是一样,只是尽可能使用命令。

我还看到,如果您需要一个事件,就像 MVP 一样;将事件委托(delegate)给演示者/ View 模型,也就是说,如果它不是 View 的工作(例如更新 UI)。

另一方面,View-Model 没有 View 引用,所以我必须更加努力地使用数据绑定(bind)。
您必须使用 DelegateCommands(与 RelayCommands 相同,对吧?)。

嗯...更多问题...使用具有两个 View /用户控件的相同 View 模型是否安全?

哦...昨天在玩MVVM的时候遇到了一个问题
我为键绑定(bind)的东西创建了命令的 CommandReference 并将此引用分配给按钮的命令属性,好吧,CanExecuted 第一次工作但是它当 CanExecuted 为真时,未更新 IsEnabled 属性。我通过将命令直接绑定(bind)到按钮而不使用引用来修复它。问题是:为什么有些代码将引用链接到对象,而其他代码为什么直接绑定(bind)命令?

我应该学习与 MVVM 相关的哪些内容? (我昨天看到了一个叫做附加行为的东西,但我不知道那是什么)。

我正在重写我使用 MVP 但现在使用 MVVM 开发的笔记应用程序。我将用命令替换事件(使用 DelegateCommand),消除 View 模型上的 View 引用,我认为这都是因为我看到的 MVVM 示例很像 MVP。

好吧,如果你指出我对这种模式的所有误解,我将不胜感激。

谢谢你,以后我会帮助下一个 MVVM 新手:)

最佳答案

哇,我将尝试回答尽可能多的不涉及特定技术或框架的问题...抱歉,如果我遗漏了一些(要点会有所帮助)

  • MVVM 不一定是 MVP 的变体。 MVP 本身是一个含糊不清的术语。马丁福勒通过 splitting it into two patterns 做到了正义. MVVM 独立存在,但与 MVP 模式共享一些概念。与所有 UI 模式一样,它试图尽可能地将 View 逻辑与业务逻辑分开。 MVVM 所做的与 MVP 的不同之处在于它创建了一个纯粹用于演示目的的模型(或 presentation model )。这与 MVP 模式解决分离问题的方式不同。
    • Passive View - 使用被动 View , View 永远看不到模型。
    • Supervising Controller - MVVM 比被动 View 更接近监督 Controller 模式。这里唯一真正的区别可能是 MVVM 明确地为 View 创建了一个模型(因此称为“ View 模型”)
  • ViewModel 没有对 View 的引用,因为它充当 View 数据的模型。这是一个适当的抽象。如果它还引用了 View ,您将拥有双向依赖关系,这会产生额外的耦合。此外,ViewModel 本身并没有真正的理由去了解 View。它的唯一工作是从 View 中抽象模型(实际业务模型)。
  • DelegateCommands 与 RelayCommands - 我相信你在这里得到的是特定技术,所以我真的不能很好地回答这个问题。
  • 您不应为多个 View 设计一个 ViewModel。这只会造成复杂性,因为如果您更改 View ,您将不得不调查哪些 ViewModel 可能受到影响并进行更改。这可能会导致级联效应。您的行为应该在业务模型中,而不是 ViewModel 中,因此 ViewModel 只需要包含转换和事件处理逻辑。
  • 但是,ViewModel 与 UserControl 的比例为 1:1 是个好主意,因为 UserControl 应该能够充当屏幕上的自主单元。
  • 至于其他具体的技术问题,抱歉,我没有答案。但是,我可以建议您仔细阅读我为 Passive View 提供的链接。 , Supervising Controller , 和 Presentation Model .它们为 UI 模式提供了一些上下文,并且是技术中立的。

重要的是要记住,虽然 MVVM 适合解决采用 WPF 所带来的问题,但它并不是特定于技术的模式。如果你在不理解底层哲学的情况下过于深入地研究一个特定的实现,你可能会在早期犯一些非常大的错误,并且只有在为时已晚之后才发现它们。不幸的是,MVVM 不是一个有据可查的模式,当您说每个人对它是什么都有自己的想法时,您是对的。

这不是一个革命性的模式(它已经以不同的名称存在多年),但 WPF 的数据绑定(bind)使其成为现在可行的解决方案,因此它正在获得新的流行。这是一个好的模式,但不是教条。以适当的怀疑态度对待您面临的每一个“命令”。

编辑

@micahtan说数据绑定(bind)是 WPF 中非常重要的部分是正确的。我说过 WPF 的数据绑定(bind)支持 MVVM 解决方案,但绑定(bind)本身非常强大,这就是为什么 MVVM 的采用比围绕它的文献增长得更快。

关于c# - 我对 MVVM 模式有一些疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/997650/

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