我想我得到了一些知识闪光,现在我完全糊涂了。我看了许多mvvm实现,如Ocean,Stuff,BBQShack,MVVM demo,WAF,Chinch1,2等...
每个人都以不同的方式做MVVM ......
有一种情况让我疯狂。我不理解,我希望有人能清除我脑海中的云彩。
但在我想发布 Jeremy Likness 的评论之前:
“我相信大多数开发人员都认为视图应该只有一个视图模型。没有必要将多个视图模型附加到单个视图。如果考虑关注点分离,这是有道理的,因为如果屏幕上的“联系人窗口小部件”绑定到“联系人视图模型”和“公司窗口小部件”绑定到“公司视图模型”,则这些应该是单独的视图,而不是具有两个视图模型的单个视图。“
场景:当View有一个ViewModel或ViewModel绑定到一个UserControl时......
问题:我是否需要为每个ViewModel创建3个UserControls CustomerView,OrderView,ProductView?如果是这样,你如何在3个UserControls与后台的3个ViewModels之间同步GUI中的数据绑定?使用消息系统?
如果您的回答是是,那么我为什么不创建一个绑定到BillingViewModel的大型UserControl充当Controller,它暴露了ObservableCollection属性CustomerListWithAllOrdersAndProducts,它可以很容易地绑定到顶层控件的datacontext和它下面的所有3个网格(客户等......)绑定到当前的datacontext。然后更改客户将自动更改订单和产品...
当屏幕中不仅有3个UserControls像DataGrids但是还有5个文本框的Customer公式和3个文本框的Order公式时,你会如何处理这个场景?你会将这些公式化程序放在另外2个UserControls中,这样你就有了5 Window中的UserControl和它们一起由ViewModel与Messenger系统进行“映射”。这可能会让人感到非常困惑......它是否真的以这种方式在大型mvvm应用程序中实现?
答案 0 :(得分:2)
您建议您需要创建3个控件(客户/订单/产品),因为您的设计需要您这样做。这意味着您的GUI设计者无法选择将客户字段与订单或产品字段交错。
现在这可能是也可能不是一个好主意......但我认为这是一个奇怪的限制。 (这意味着您不能与订单确认一起重复客户地址,因为它位于不同的表格中)。
这些MVVM设计风格中的一个比其他风格更正确并不是那么简单。我建议您查看备选方案并选择可帮助您解决问题的MVVM风格。这个1:1的教条似乎没有帮助你,所以我放弃它。