2010-05-20 47 views
1

在MVVM中,我将视图模型看作是提供视图需要绑定到的所有数据和命令的类。什么是MVVM项目中的“其他”类型的视图模型?

但是当我有一个数据库实体对象,比如说一个Customer,并且我想要构建一个可以在数据网格中使用的Customer类的Shape或Flatable的类时会发生什么情况。例如,也许这个特殊的Customer对象有一个属性TotalOrders,它实际上是通过一个带有Order实体集合的连接进行计算的。

我的问题是,我叫什么这个特殊的Customer类?在其他情况下,我很想将它称为CustomerViewModel,但我觉得像“超载”这样的视图模型的概念会在MVVM项目中造成混淆。你会建议什么?

+0

也许'CustomerListViewModel'? – 2010-05-20 05:47:45

+0

同意罗伯特,虽然也许我会说CustomerListItem或CustomerListItemViewModel(我知道,一口......) – Josh 2010-05-20 05:50:29

回答

3

我相信你原来的想法是正确的。 “视图模型”类是暴露域模型中的数据对象的类,这些模型对象更容易被消费和管理。

退房http://en.wikipedia.org/wiki/Model_View_ViewModel

因此,CustomerOrder类是 “模式” 的部分。你描述和正在考虑调用CustomerViewModel确实是一个“视图模型”,然后显然你的WPF页面/控件是“视图”。

在命名方面......随心所欲!但我喜欢你最初的想法CustomerViewModel。或者,可以命名它更接近视图的一点。例如,如果页面是CustomerOrderSummary页面,则为CustomerOrderSummaryViewModel

+1

+1的最后一点。这应该是答案。始终根据与其相关的视图命名您的ViewModel。 – Amsakanna 2010-05-20 06:27:31

+0

+1。我喜欢这个。我想我会去''OrderPanelCustomerViewModel'。所以,视图的名称+基本对象+视图模型的名称。而且,由于JSprang的想法,我将把所有这些对象放在名为DataViewModels的文件夹中。 – devuxer 2010-05-20 21:20:45

0

这很常见,其中有一些例子,你有一个List对象不是完全的视图模型。由于您将客户模型对象更改为虚拟机的更多内容,您可以将其命名为CustomerDto,或者我同意其余的海报,CustomerViewModel(CustomerVM)也可以。

1

我们称之为我们的数据视图模型。

例如,我们可能有Results.xaml将Results_ViewModel作为视图模型。结果页面有一个网格,网格中的每一行都是一个Customer。但是,就像你说的,你需要一个客户的视图模型,这样你就可以拥有一个像'Total Orders'一样的属性。在这种情况下,我们的网格将包含一个Customer_DataViewModel的集合。

+0

+1。我喜欢“DataViewModel”。看到我对Reddog的回答的评论。 – devuxer 2010-05-20 21:21:28

0

我不喜欢CustomerDto,因为它意味着另一个概念(即表示要发送到别处的数据的东西)。我们使用术语PresentationModel,因为它基本上是“呈现”一个不属于模型层的属性的基础模型对象。对于我来说,当我实际上可以更改模型和PresentationModel以进行只读视图时,我使用术语ViewModel。

相关问题