gpt4 book ai didi

wpf - 我仍然没有得到 MVVM!

转载 作者:行者123 更新时间:2023-12-04 08:00:30 25 4
gpt4 key购买 nike

也许我用 Cairngorm 之类的框架进行 Flex 开发已经太久了,但我仍然没有得到 MVVM。我知道 Cairngorm 是一个框架,MVVM 是一种设计模式,但我在这里比较的是设计模式的 Cairngorms 实现,主要是 Model View Controller 和命令模式。不要误会我的意思,我认为将 View 绑定(bind)到 View 模型的想法很棒,并且在可测试性和设计师-程序员工作流程方面的优势也很棒。但是有两件事困扰着我:一是使用命令对我的所有操作进行编程,顺便说一下,这也使我与 Cairngorm 接壤。只有在 Cairngorm,他们实现命令模式的方式才能为您提供所有命令的集中 Controller 的好处,而 MVVM 似乎无法获得这一点,除非我遗漏了什么。如果我认为在 Cairngorm 中实现命令在 MVVM 中复杂得多,我的意思是必须为我所做的一切创建实现 ICommand 的私有(private)类似乎太多了。然后你会遇到问题,并非所有控件都实现命令,例如,如果你使用我经常使用的 ListBox,那么你就不走运了;有解决方法,但各种复杂。

困扰我的另一件事是 View 模型之间的通信。在标准的 Model View Controller 中,您收集 View 所观察到的集中模型上的所有信息,但 MVVM 似乎并非如此,至少在我看到的示例中不是这样。因此,例如,如果您有一个带有列表的控件,用于选择一个项目,然后将其用作不同 View 和后续操作的源,我不清楚在没有集中模型的情况下如何通知每个人更改。

我知道 MVVMFoundation 和 Tom Ershamam 关于 WPF Commands Everywhere 的工作。称我为老式,但我认为为了真正理解一种模式,您必须构建一个从头开始使用它的应用程序。这就是我正在做的事情,但我一直在想我一定错过了一些重要的东西,因为我似乎无法平息脑海中这个不断告诉我必须有更好方法的小声音。

最佳答案

无论框架/架构/模式是什么,您总是需要在工具栏/菜单或普通表单上响应按钮单击的东西。如果应该启用按钮/菜单,您需要一些说明。所以 ICommand 接口(interface)很适合这个。
我同意Petoj,您不需要新类(class)。我编写了一个简单的实现,它需要 1 或 2 个委托(delegate),一个用于对单击的实际响应(Execute 方法),另一个用于命令的“启用”状态。
这样,ViewModel 就不会杂乱无章。

但我同意这不是一个集中的命令存储库。但是你真的想要一个吗?我更喜欢将特定于应用程序一部分的命令放在相应的 View 模型中,并在应通知应用程序的其余部分时引发适当的事件。

对于列表框,我将 SelectedItem 属性绑定(bind)到 ViewModel 上的一个属性。使用 INotifyPropertyChanged,您的代码的任何部分都可以对更改使用react。

ViewModel 之间的通信是一个很好的问题。如果您需要在同一屏幕上显示不同的 View ,您可以拥有一个包含每个 View 的 View 模型的“ super ” View 模型。
那里有很多 MVVM 框架。我使用了 Mark Smith's MVVM helpers 的部分内容,它非常轻巧且有用。

关于wpf - 我仍然没有得到 MVVM!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325091/

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