Jul*_*cia 8 wpf design-patterns mvvm
也许我一直在使用像Cairngorm这样的Frameworks进行Flex开发太长时间,但我仍然没有得到MVVM.我知道Cairngorm是一个框架而MVVM是一种设计模式,但我在这里比较的是Cairngorms设计模式的实现,主要是模型视图控制器和命令模式.不要误解我的意思,我认为将视图绑定到视图模型的想法很棒,并且可测试性和设计器 - 程序员工作流程的优势很大.但是有两件事让我感到烦恼:一件是用Commands编写我的所有动作,顺便说一句,这也让我与Cairngorm接壤.只有在Cairngorm中,他们实现命令模式的方式才能让你拥有一个集中控制器用于所有命令,除非我遗漏了一些东西,否则你似乎无法使用MVVM.如果我认为实现Cairngorm中的命令在MVVM中复杂是最糟糕的,我的意思是必须创建实现ICommand的私有类,因为我所做的一切看起来都太多了.然后你遇到的问题是并非所有的控件都实现了命令,例如,如果你使用的是ListBox,我经常使用它,你运气不好; 有解决方法,但各种复杂.
困扰我的另一件事是View Models之间的沟通.在标准的模型视图控制器中,您可以收集视图观察到的集中模型的所有信息,但MVVM似乎不是这种情况,至少在我看到的示例中没有.因此,例如,如果您有一个带有列表的控件,您可以使用该列表选择一个项目,然后将该项目用作不同视图和后续操作的源,我不清楚如何在没有集中模型的情况下通知所有人.
我知道MVVMFoundation和Tom Ershamam关于WPF Commands Everywhere的工作.称我为老式,但我认为为了真正理解模式,你必须构建一个从头开始使用它的应用程序.这就是我正在做的事情,但是我一直在想我一定会错过一些必不可少的东西,因为我似乎无法在我脑海中保持这个小小的声音,一直告诉我必须有一个更好的方法.
无论框架/架构/模式是什么,您总是需要能够响应工具栏/菜单或普通表单上的按钮单击的东西。您需要一些内容来说明是否应启用按钮/菜单。因此 ICommand 接口非常适合此操作。我同意 Petoj 的观点,你不需要新课程。我编写了一个简单的实现,需要 1 或 2 个委托,一个用于对单击的实际响应(执行方法),另一个可选的用于命令的“启用”状态。这样,ViewModel 就不会混乱。
但我同意这不是一个集中的命令存储库。但你真的想要一个吗?我更喜欢将特定于应用程序某一部分的命令放在相应的视图模型中,并在应通知应用程序的其余部分时引发适当的事件。
对于列表框,我将 SelectedItem 属性绑定到 ViewModel 上的属性。使用 INotifyPropertyChanged,代码的任何部分都可以对更改做出反应。
ViewModel 之间的通信是一个好问题。如果您需要在同一屏幕上显示不同的视图,您可以拥有一个“超级”视图模型,其中包含每个视图的视图模型。有相当多的 MVVM 框架。我使用了Mark Smith 的 MVVM 助手的一部分,它非常轻量且有用。
归档时间: |
|
查看次数: |
823 次 |
最近记录: |