Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net VMa<;-Ma、VMb->;妈…对。。。VMa<;-VMb->;文科硕士_.net_Wpf_Design Patterns_Mvvm - Fatal编程技术网

.net VMa<;-Ma、VMb->;妈…对。。。VMa<;-VMb->;文科硕士

.net VMa<;-Ma、VMb->;妈…对。。。VMa<;-VMb->;文科硕士,.net,wpf,design-patterns,mvvm,.net,Wpf,Design Patterns,Mvvm,选项1:ViewModelA ModelA 选项2:视图模型A模型A *ModelA仅通过ViewModelB更改其属性,因此在选项2中不需要实现任何机制来通知模型中的任何人其已更改。 *Option2需要两个viewmodels之间的消息传递解决方案,而Option1则不需要 选项1和选项2哪个更好 编辑: 我选择实现Option2,因为我想让ModelA类成为一个简单的POCO。 我还将ViewModelB重命名为ModelViewB ASWER: 终于实现了。。。选择1。这里的诱惑是我可以

选项1:ViewModelA ModelA
选项2:视图模型A模型A

*ModelA仅通过ViewModelB更改其属性,因此在选项2中不需要实现任何机制来通知模型中的任何人其已更改。
*Option2需要两个viewmodels之间的消息传递解决方案,而Option1则不需要

选项1和选项2哪个更好

编辑:
我选择实现Option2,因为我想让ModelA类成为一个简单的POCO。
我还将ViewModelB重命名为ModelViewB

ASWER:
终于实现了。。。选择1。这里的诱惑是我可以保持ModelA的简单(如不通知任何人)。但最终它使应用程序变得复杂,因为它与其他类的实现不同。最好遵守一条规则(即使有一些开销)


messenger类实际上是helper类,并不是模式的核心组成部分,所以我让解决方案更接近模式(正如下面提到的家伙)。

如果您没有作为MVVM结构(MVVM+M)的一部分实现的
中介体。选项1可以很好地工作。如果您为将来的结构添加中介模式,这将是非常好的时间投入


只要没有直接从视图访问数据,并且所有数据都是通过viewmodel访问的,可以获取或设置数据,那么就可以了。

如果您没有作为MVVM结构(MVVM+M)的一部分实现的
中介体
。选项1可以很好地工作。如果您为将来的结构添加中介模式,这将是非常好的时间投入


只要没有数据直接从视图中访问,并且所有数据都是通过viewmodel访问的,可以对其进行获取或设置,那么就可以了。

我总是选择第一个选项


这个选项是MVVM之后的选项,它可以生成更干净、更容易理解的体系结构。

我总是选择第一个选项


这个选项是MVVM之后的选项,它可以生成更干净、更容易理解的体系结构。

您能详细解释一下您的场景吗?您是否有两个GUI,一个会更改模型,另一个不会更改?@jpsstavares完全正确。两个GUI中的一个仅用于演示目的(实际上是在画布上绘制的一些形状)。您能否进一步解释一下您的场景?你有两个GUI,一个会改变模型,另一个不会?@ JPSSTAVAES。两个GUI中的一个只用于演示目的(实际上是画布上绘制的一些形状)。实际上,我使用MVVM基金会的一个信使类,对于其他一些通信PUPrsies,所以我的问题不完全是这样。这更像是两者之间的“哲学”正确性。好的,选项1是好的。我在应用程序的一部分中也做了同样的事情。在这两者之间不需要有消息传递结构。规则很简单。只要您的视图没有直接设置或获取信息,就可以了。如果要捕捉Silverlight视图,则不必更改ViewModels中的任何内容。希望我回答了你的问题。哎呀!请重新检查箭头。我犯了一个错误。两个方向是一个方向箭头。谢谢实际上,我使用MVVM基金会的一个信使类,对于一些其他的通信问题,所以我的问题不完全是这样。这更像是两者之间的“哲学”正确性。好的,选项1是好的。我在应用程序的一部分中也做了同样的事情。在这两者之间不需要有消息传递结构。规则很简单。只要您的视图没有直接设置或获取信息,就可以了。如果要捕捉Silverlight视图,则不必更改ViewModels中的任何内容。希望我回答了你的问题。哎呀!请重新检查箭头。我犯了一个错误。两个方向是一个方向箭头。谢谢哎呀!请重新检查箭头。我犯了一个错误。两个方向是一个方向箭头。谢谢它仍然更接近原始的MVVM模式。不要忘记,您的需求将来可能会发生变化,您可能需要从两个ViewModels更改模型,或者从model.oops更新两个ViewModels!请重新检查箭头。我犯了一个错误。两个方向是一个方向箭头。谢谢它仍然更接近原始的MVVM模式。不要忘记,您的需求将来可能会发生变化,您可能需要从两个ViewModels中更改模型,或者从模型中更新两个ViewModels。