在视图模型MVVM复制模型属性(MVVM duplicating Model properties

2019-07-30 03:54发布

它似乎有一个模型不应该暴露它的实体查看指导,并且所需的所有属性应该在视图模型被复制

例:

Product
Id {get; set;}
Name {get; set;}
.......


ProductViewModel : ViewModelBase
Id {get; set;}
Name {get; set;}
.......

这是为什么需要? 我能理解这一点,如果型号犯规实施INPC,但如果这样做的话,我觉得这完全没有必要。

Answer 1:

当查看被绑定到模型:

  • 如果查看需要改变,或者你有多个视图模型更改将导致更改绑定到该模型中的所有视图。

  • 从视图的角度来看,对象势必可能不是那么直观; 当你需要一个性能和/或命令添加到该对象,你的模型添加那些视图模型,并保持“原始”的属性或者你修改模型?

有一个视图模型为您提供了一个单一的模式和多间额外的抽象(版本)查看

总而言之,这仅仅是一个建议,但是要知道,什么似乎确定,当您需要修改/更新应用程序今天可能没有那么大。



Answer 2:

指导,就是这样。 这取决于当时的情况。 纯粹主义者会认为完全从视图中分离模型允许模型来更改而不视场改变。

我往往只代理模型的属性,如果我要(或者INPC或一些视图特定逻辑像模型具有名字和姓氏,但没有全名)

否则,我绑定到模型(这是一个公共财产上的视图模型)。 如果我的情况发生变化,我需要的东西封装然后我重构时,我有一种需要。

我也总是尽量保证有一个地方一个视图模型(即使它只是暴露了模型),因此重构是容易以后。



Answer 3:

我的问题是,为什么您的模型实施INPC? 他们需要什么?

模型通常只是一个DTO,不需要任何变化逻辑。

此外,如果INPC的你的基地实现从MVVM框架来了,但你的模型存在于共享组件,这是否装配那么就需要你的MVVM框架的引用,以及潜在的其他组件WPF过?

我们有这个场景是一组表示在服务器和客户端都在我们的数据共享对象。 客户端是一个WPF应用程序,这样很好,但对于服务器端是一种服务,所以我们并不需要INPC。



Answer 4:

您的视图模型不正确。 如果你已经有了产品类型的模型,你可以简单地在您的视图模型定义是这样的:公共产品产品{...}



文章来源: MVVM duplicating Model properties in ViewModel
标签: mvvm