关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
6年前关闭。
Improve this question
我花了很长时间在 WPF 中搜索 MVVM。我明白为什么要使用它。这对我来说很清楚。
我不知道的是 ViewModel 本身的内容。我知道这是 View 和模型之间的连接。另外,我知道(至少,大多数程序员的建议)实现了 INotifyPropertyChanged
.除此之外,命令。
假设我有这个模型(EF 6 的代码优先):
public class City
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CityId { get; set; }
[DataType("VarChar"), MaxLength(25), Required]
public string CityName { get; set; }
}
我的问题是:
1-在我见过的许多示例中,他们在 VM 中再次重新创建了相同的字段。目的是什么,是否足以拥有整个对象(在我的例子中是城市)。如果有很多字段怎么办!
2-为了能够在我的 View (CRUD)中使用它,我的示例中的 CityVm() 将如何?
我很感激任何帮助。
最佳答案
MVVM 模式中的 View 模型封装了 View 的表示逻辑和数据。它没有直接引用 View 或关于 View 的具体实现或类型的任何知识。 View 模型实现了 View 可以数据绑定(bind)到的属性和命令,并通过更改通知事件通知 View 任何状态更改。 View 模型提供的属性和命令定义了 UI 提供的功能,但 View 决定了如何呈现该功能。
View 模型负责协调 View 与所需的任何模型类的交互。通常, View 模型和模型类之间存在一对多的关系。 View 模型可以选择将模型类直接暴露给 View ,以便 View 中的控件可以直接数据绑定(bind)到它们。在这种情况下,模型类需要设计为支持数据绑定(bind)和相关的更改通知事件。
View 模型可以转换或操作模型数据,以便 View 可以轻松地使用它。 View 模型可以定义额外的属性来专门支持 View ;这些属性通常不会成为模型的一部分(或不能添加到模型中)。例如, View 模型可以组合两个字段的值以使 View 更容易呈现,或者它可以计算最大长度字段的剩余输入字符数。 View 模型还可以实现数据验证逻辑以确保数据一致性。
View 模型还可以定义 View 可以用来在 UI 中提供视觉变化的逻辑状态。 View 可以定义反射(reflect) View 模型状态的布局或样式更改。例如, View 模型可以定义一个状态,该状态指示数据正在异步提交给 Web 服务。 View 可以在此状态期间显示动画以向用户提供视觉反馈。
通常, View 模型将定义可以在 UI 中表示并且用户可以调用的命令或操作。一个常见的例子是 View 模型提供了一个提交命令,该命令允许用户将数据提交到 Web 服务或数据存储库。 View 可以选择用按钮来表示该命令,以便用户可以单击按钮来提交数据。通常,当命令变得不可用时,其关联的 UI 表示将被禁用。命令提供了一种封装用户操作并将其与 UI 中的可视化表示清晰分离的方法。
总而言之, View 模型具有以下关键特征:
关于c# - MVVM 中的 ViewModel 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36937210/