wpf - MVVM 中的模型是域模型还是 POCO?

标签 wpf mvvm

在 WPF 应用程序的上下文中,可以将我的域模型用作 MVVM 模式中的模型吗?还是模型(在 MVVM 中)应该是一些 POCO?我个人认为没有任何理由反对将域模型用作 MVVM WPF 模式的模型。

但随后 XAML 元素将绑定(bind)到什么?虚拟机中的属性,下面映射到域模型,对吗?

最佳答案

回答标题中提出的问题:两者都不是。

在 MVVM 中,“模型”通常是 View 模型的另一侧(即 View 模型和存储库之间)的所有内容。该模型可以(并且通常是)由几种不同的附加架构和模式组成,在“模型”中包含服务、微服务、DAL 和 DIL、域模型、POCO/数据实体等是很正常的。

你说的域对象和POCO不是 型号,它们是 的一部分该模型。您所说的模型的观点是从其他模式(如 MVC)中引入的,其中数据实体或域对象确实是模型。该模型比 MVVM 中的模型稍微复杂一些。

您可以直接绑定(bind)到 MVVM 中的 POCO,但这通常不是一个好主意,除非它是一个非常简单且不会更改的(例如来自存储库的查找列表)。绑定(bind)到域对象通常是一个非常糟糕的主意,因为这些对象将包含与存储和检索相关的额外功能或信息,但对于 UI 中显示的任何内容来说都是多余的。域对象的另一个问题是它们通常不能很好地序列化(如果有的话 - 通常会生成域对象),因此除非您有一个非常简单的模型,否则最好尽快将域对象转换为 POCO。

answer from Owen 中所述,您应该使用 View 模型类包装您的 POCO,然后再将它们提供给 UI。唯一不应该的情况是您不需要任何属性更改通知并且您也不想利用对象的任何其他功能(例如,您不需要显示项目上的上下文菜单)。

关于wpf - MVVM 中的模型是域模型还是 POCO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41363410/

相关文章:

wpf - WPF 中的拖放

WPF ToggleButton IsChecked 绑定(bind)问题

java - Android MVVM 谁应该读取和存储包

c# - 慢 WPF 文本框

c# - 如何让设计时文本在 WPF 的多语言应用程序中可见?

c# - 让用户控制延伸到所有给定的空间

WPF 下划线绑定(bind) (MVVM)

c# - 在WPF中更新动态数据显示图表的有效方法

c# - 当我更改绑定(bind)页面属性时,为什么我在 wpf 中的主窗口没有更新?

c# - 为什么我的 Silverlight XAML 绑定(bind)单元测试失败?