在WPF中使用模型有什么意义?

Mar*_*man 12 c# wpf mvvm

到目前为止,我还没有看到在WPF中使用模型的价值.按照惯例,我的所有ViewModel都有一个关联的Model.这些模型中的每一个都是其各自ViewModel的虚拟克隆.ViewModel和Model类都实现INotifyPropertyChanged了,ViewModel只是将所有内容委托给Model.

那么为什么要打扰模特呢?为什么我不能只将模型逻辑移到ViewModel中并将其调用一天?

拥有MVVM 似乎相当冗余(即不是DRY),并且默认情况下只使用VVM,除非某些特殊边缘情况需要模型.

如果使用显式模型类更好地支持单元测试,例如,或者其他一些最佳实践,我可以看到值.

nal*_*ply 5

该模型只是低级应用程序数据。

\n\n

视图模型更加具体。

\n\n
    \n
  • 它就像一个窗口,可以利用为视图定制的数据。
  • \n
  • 它还使用视图所需的详细信息来增强模型。一个很好的例子是分页。
  • \n
  • 一个模型可以有多个视图模型。这些视图模型将提供数据的不同方面。
  • \n
  • 您可以创建不同数据源的混搭。视图模型干净地呈现了所涉及的模型。
  • \n
\n\n

这意味着模型和视图模型之间不存在 1:1 的关系。

\n\n

因此,如果您只是显示低级数据,而不需要大量额外的逻辑、功能、摘要、聚合、过滤器等,那么您可以放弃视图模型,直接使用模型。您的项目似乎就是这种情况。

\n


Ado*_*rez 3

如果您将其视为一个抽象,那么假设您需要构建一个屏幕来显示员工列表并进行选择、搜索或过滤。然后我们将其分解为组件。您将需要:

  1. 一个Employee类(模型)
  2. 准备 EmployeeManagementViewModel并呈现您的员工列表并管理您的视图的状态更改(例如可以包含SelectedEmployee过滤搜索文本等)以供您使用EmployeeManagementView
  3. 员工列表(将居住在您的EmployeeManagementViewModel

您很可能已经上课了Employee。如果是这种情况,那么您只需在您的员工中公开该模型EmployeeManagementViewModel即可ObservableCollection

如果您还没有Employee 类,您可以决定创建一个 Employee 类EmployeeViewModel并在其中添加您的Employee属性FirstName,例如LastName、 等。

从技术上讲,这是可行的,但从概念上讲,它让我感到困扰,因为 anEmployeeViewModel 不是员工(它包含员工)。如果您要抽象现实,那么 Employee 的蓝图不应包含视图使用的属性或方法。对我来说,Employee 应该是一个可以实现的 POCO INotifyPropertyChanged,仅此而已。您将视图状态与模型本身分开。拥有 Employee POCO 可以更轻松地进行单元测试、创建模拟员工、通过 ORM 将其映射到数据库表等。

顾名思义,ViewModel 是视图的模型,模型是业务领域的模型

无论如何,我就是这么看的。当我开始做 MVVM 工作时,我也有同样的问题,但多年来似乎这是有道理的。

  • 所以我已经从事这个工作一年了。我实际上忘记了我发布了这个问题。我的应用程序的结构正如您所描述的那样。 (2认同)