Mvvm 当一个视图有一个视图模型时,客户订单产品关系/gui会变得非常糟糕

Mvvm 当一个视图有一个视图模型时,客户订单产品关系/gui会变得非常糟糕,mvvm,model,view,viewmodel,Mvvm,Model,View,Viewmodel,我想我得到了一些知识,现在我完全糊涂了。我看了很多mvvm实现,比如Ocean、Stuff、BBQShack、mvvm演示、WAF、Chinch1、2等等 每个人都在以不同的方式做MVVM 有一个场景让我发疯。我失去了理解,我希望有人能清除我脑海中的乌云 但在我想发表Jeremy Likness的评论之前: “我相信大多数开发人员都同意一个视图应该只有一个viewmodel。没有必要将多个viewmodel附加到一个视图。如果您考虑将关注点分离,这是有意义的,因为如果屏幕上的“联系人小部件”绑定

我想我得到了一些知识,现在我完全糊涂了。我看了很多mvvm实现,比如Ocean、Stuff、BBQShack、mvvm演示、WAF、Chinch1、2等等

每个人都在以不同的方式做MVVM

有一个场景让我发疯。我失去了理解,我希望有人能清除我脑海中的乌云

但在我想发表Jeremy Likness的评论之前:

“我相信大多数开发人员都同意一个视图应该只有一个viewmodel。没有必要将多个viewmodel附加到一个视图。如果您考虑将关注点分离,这是有意义的,因为如果屏幕上的“联系人小部件”绑定到“联系人viewmodel”,而“公司小部件”绑定到“公司视图模型”,这些视图应该是单独的视图,而不是包含两个视图模型的单个视图。“

场景:当视图有一个ViewModel或ViewModel绑定到一个UserControl

问题:我是否需要为每个视图模型创建3个用户控件CustomerView、OrderView、ProductView?如果是这样,您如何在3个用户控件和3个视图模型之间同步GUI中的数据绑定?使用消息传递系统

如果您的答案是,那么我为什么不创建一个绑定到BillingViewModel的大用户控件作为控制器,它公开属性ObservableCollection CustomerListWithAllorders和Products,这些属性可以轻松绑定到顶级控件的datacontext和所有3个网格(customer等…)它下面绑定到当前的datacontext。然后,客户的变更将自动更改订单和产品


当屏幕上不仅有3个用户控件(如DataGrids)而且还有5个文本框的客户公式和3个文本框的订单公式时,您会如何处理这种情况?您会将这些公式放在另外2个用户控件中,以便在窗口中有5个用户控件,并且所有这些控件一起“映射”吗通过其ViewModel与Messenger系统通信。这会让人很困惑。。。在大型mvvm应用程序中,他们真的是这样做的吗?

您建议您需要创建3个控件(客户/订单/产品),因为您的设计要求您这样做。因此,这意味着您的GUI设计师不能选择将客户字段与订单或产品字段交错

这可能是个好主意,也可能不是个好主意。。。但我认为这是一个奇怪的限制。(这意味着您不能将客户地址与订单确认一起重复,因为它位于不同的表中)


这些MVVM设计风格中的一种比其他的更正确,这并不是那么简单。我建议您查看备选方案,并选择帮助您解决问题的MVVM风格。这个1:1的教条似乎对你没有帮助,所以我放弃它

jdv=>quote:“(这意味着您不能将客户地址与订单确认一起重复,因为它在另一个表中)。”这是一个非常好的评论,非常正确!做1:1视图/虚拟机的东西我不能混合gui控制什么对设计师来说是非常非常有限的做用户界面看起来都像正方形区域/表格…关于你关于交错字段的陈述,这对每个场景都是有效的,所以实际上1:1教条根本没有帮助。。。最重要的是,如果CustomerList位于一个组合框中,并且在该组合框下有CustomerFirstName、lastname等字段,那么我必须将CustomerListViewModel与CustomerDetailViewModel混合使用。。。太可怕了…@Lisa:有一个例子说明1:1的设计是合理的。也就是说,当你构建一个可定制的插件框架(比如IDE)时,用户可以通过组合构建块来构建他们的UI。但在大多数应用程序中,这根本不是一个重要的功能,只会使学习曲线变陡。@Lisa:作为开发人员/设计师,您有责任选择一种设计,使您能够构建组织所需的应用程序。如果您能够想象合理的变化,那么思考您的设计是否能够处理需求的变化有时也是有用的。如果你能得出这样的结论:设计允许变化,而不需要太多的返工,那么你就知道你走在了正确的轨道上。以1:1的方式进行设计会导致糟糕的GUI。我这样做会导致技术问题。我讨厌mvvm。。。如果有这么多人使用它,那就不会那么可怕了至少我听到的是。。。