当前位置: 首页 > 编程语言 > C#

我有一些关于MVVM模式的问题Share

时间:2023-04-10 21:52:56 C#

我有一些关于MVVM模式的问题我叫Jesús,来自西班牙,我是一名.NET开发人员,我几天前才发现这个很棒的网站。我有一些关于MVVM模式的问题,如果你能回答我会很高兴。我三个月前开始使用WPF,并且学习了MVP模式。MVP很棒,因为您可以很好地构建应用程序。我开始到处查看MVVM,但每个人都在以自己的方式使用这种模式。每个博主都在他们的WPF博客中谈论MVVM,但每个实现都大不相同。我现在正在使用CodePlex上的MVVM工具包进行实施,但我有疑问并且找不到太多信息。我认为MVVM是MVP的变体。使用MVP,每个视图都有一个执行视图工作的展示器。在MVVM中它是相同的,但只要你可以使用命令。我还看到,如果您需要一项活动,例如MVP;将事件委托给演示者/视图模型,即它不是视图的工作(比如更新UI)。另一方面,View-Model没有View引用,因此我必须更加努力地处理数据绑定。您必须使用DelegateCommands(与RelayCommands相同,对吧?)。嗯...更多问题...将同一个ViewModel与两个视图/用户控件一起使用是否安全?哦...昨天我在使用MVVM时遇到了问题。我为键绑定创建了命令的CommandReference,我将此引用分配给按钮的Command属性,好吧,CanExecuted第一次工作,但当CanExecuted为真时它没有更新IsEnabled属性。我通过将命令直接绑定到按钮而不使用引用来修复它。问题是:为什么有些代码将引用链接到对象,而其他代码为什么直接绑定命令?MVVM应该学什么?(昨天我看到了一个叫做附加行为的东西,但我不知道那是什么)。我正在重写一个使用MVP开发的注释应用程序,但现在使用MVVM。我将用命令替换事件(使用DelegateCommand),消除ViewModels上的视图引用,我认为这都是因为我看到MVVM的示例看起来很像MVP。好吧,如果你能指出我对这个模式的任何误解,我将不胜感激。谢谢,我会在未来帮助下一个MVVM新手:)哇,我会尽量回答尽可能多的问题,而不涉及特定的技术或框架......抱歉,如果我错过了一些(要点帮助)ViewModel不是对视图的引用,因为它充当视图数据的模型。这是一个适当的抽象。如果它还引用了视图,那么您将具有双向依赖性,这会产生额外的耦合。此外,ViewModel本身没有真正的理由了解View。它唯一的工作是从视图中抽象出模型(实际的业务模型)。DelegateCommands与RelayCommands-我相信你在这里获得了一种特定的技术,所以我无法真正回答这个问题。您不应该为多个视图设计ViewModel。这只会增加复杂性,因为如果您更改视图,则必须调查哪些ViewModel可能受到影响并更改它们。这会导致级联效应。你的行为应该在业务模型中,而不是在ViewModel中,因此ViewModel只需要包含转换和事件处理逻辑。但是,ViewModel与UserControl的比例为1:1是个好主意,因为UserControl应该能够充当屏幕上的自治单元。至于其他具体的技术问题,抱歉,我没有答案。但是,我可以建议您仔细阅读我为被动视图、监督控制器和演示模型提供的链接。为UI模式提供一些上下文并且是技术中立的。重要的是要记住,虽然MVVM适合解决采用WPF带来的问题,但它不是特定于技术的模式。如果你在不理解底层哲学的情况下深入具体的实现,你可能会在早期犯一些非常大的错误,只有在为时已晚时才发现它们。不幸的是,MVVM并不是一个有据可查的模式,当你说每个人都有自己的想法时,你是对的。这不是一个革命性的模式(它已经以不同的名称存在多年),但WPF的数据绑定使其成为一个可行的解决方案,因此它正在获得新的流行。这是一个很好的模式,但它不是教义。以适当的怀疑态度对待你面对的每一个“指示”。编辑@micahtan正确地指出数据绑定是WPF的一个非常重要的部分。我说过WPF的数据绑定支持MVVM解决方案,但绑定本身非常强大,这就是为什么MVVM的采用比围绕它的文献增长得更快。您实际上不必使用RelayCommand。您真正需要做的就是在您的对象上实现ICommand接口。在SoapBoxCore框架中,我定义了一个名为ICommandControl的接口,它由所有按钮ViewModel等实现。还有一个AbstractCommandControl类,您可以从中派生来实现此目的。以上是C#学习教程:对MVVM模型的一些疑问。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: