我的名字是来自西班牙的Jesús,我是一名.NET开发人员,几天前我刚刚发现了这个伟大的网站。
我对MVVM模式有一些疑问,如果你能回答它我会很高兴 三个月前我开始使用WPF,我已经学会了MVP模式 MVP非常好,因为你可以很好地构建应用程序。
我开始在各处看到MVVM,但每个人都在用他自己的方法使用这个模式 每个博主都在他们的WPF博客中谈论MVVM,但每个实现都是截然不同的。
我现在关注在CodePlex上使用MVVM工具包的实现,但我有疑问,我找不到太多信息。
我认为MVVM是MVP的一种变体 使用MVP,每个视图都有一个执行视图工作的演示者 在MVVM中,它是相同的,但只要你可以使用命令。
我也看到如果你需要一个活动,那就像MVP一样;将事件委托给演示者/视图模型,即如果它不是视图的作业(例如更新UI)。
另一方面,View-Model没有View引用,所以我必须更加努力地使用数据绑定。
您必须使用DelegateCommands(与RelayCommands相同,对吧?)。
嗯...更多问题......使用具有两个视图/用户控件的相同View模型是否安全?
哦......昨天我在玩MVVM时遇到了问题
我为密钥绑定事件创建了CommandReference
我的命令,并将此引用分配给了我的按钮的命令属性,嗯,CanExecuted
第一次工作但它没有更新{ IsEnabled
为真时{1}}属性。我通过将命令直接绑定到按钮而不使用引用来修复它。问题是:为什么有些代码将引用链接到对象以及为什么其他代码直接绑定命令?
我应该学习哪些与MVVM相关的内容? (我昨天看到了一些被称为附加行为的东西,但我不知道那是什么。)
我正在重写我使用MVP开发的注释应用程序,但现在使用MVVM。我将用命令替换事件(使用DelegateCommand),消除View-Model上的视图引用,我认为这都是因为我看到MVVM的例子很像MVP。
好吧,如果你指出我对这种模式的所有误解,我将不胜感激。
谢谢你,将来我会帮助下一个MVVM新手:)
答案 0 :(得分:12)
重要的是要记住,虽然MVVM适合解决采用WPF带来的问题,但它不是特定于技术的模式。如果你在没有理解基础哲学的情况下深入研究具体的实现,你可能会在早期犯下一些非常大的错误,并且只有在为时已晚之后才发现它们。不幸的是,MVVM并不是一个记录良好的模式,当你说每个人都有自己的想法时,你就是对的。
这不是一种革命性的模式(它已经存在多年不同的名称),但WPF的数据绑定现在使其成为一种可行的解决方案,因此它正在享受新的流行。这是一个好的模式,但它不是学说。用适当的怀疑态度来处理你面临的每一个“指令”。
修改强>
在说明数据绑定是WPF中非常重要的部分时,@micahtan是正确的。我说WPF的数据绑定支持MVVM解决方案,但绑定本身非常强大,这就是为什么MVVM的采用速度比围绕它的文献更快。
答案 1 :(得分:1)
您实际上不必使用RelayCommand。您真正需要做的就是在对象上实现ICommand接口。在SoapBox Core框架中,我定义了一个名为ICommandControl的接口,所有按钮ViewModels等都实现了它。还有一个AbstractCommandControl类可以派生出来实现它。