【问题标题】:How to implement simple tree data structure in WPF using MVVM architecture?如何使用 MVVM 架构在 WPF 中实现简单的树形数据结构?
【发布时间】:2019-06-24 15:55:36
【问题描述】:

MVVM 架构的新手;我一直在查看this article,但我不确定哪些代码属于模型或视图模型。有人可以告诉我它是如何完成的吗?另外,每个模型都需要raisepropertychanged() 函数吗?

提前感谢您的回答!

【问题讨论】:

  • 任何模型都不应该实现 INotifyPropertyChanged。模型应该是裸 POCO 类。 Viewmodels 必须实现 INotifyPropertyChanged。
  • 如果项目足够简单,model/viewmodel可以一样。在您要绑定的任何东西上实施 INotifyPropertyChanged。
  • 所以模型应该只声明 POCO 类。我正在阅读tutorialspoint.com/mvvm/mvvm_first_application.htm,它在模型中有一堆 INotifyPropertyChanged 的​​东西;是否应该在视图模型中实现,如何实现?谢谢!
  • @DanielLi 正确实现 INPC 是视图模型定义的一大块。 如果您有单独的模型和视图模型,该模型将不会实现 INPC。乍一看,那个教程点对我来说看起来很疯狂。 Student 模型只是简单的属性。 StudentViewModel 将代表相同的概念,一个学生,但它会有通知属性、命令、脏标志属性和其他供 UI 使用的东西:如果有 StudentVM.Courses 集合,StudentVM 可能有 SelectedCourse 属性.正如凯文所说,你可以完全不用模型
  • 让 StudentViewModel 成为学生模型的集合,实际上是视图模型,这很奇怪。然后他在后面的代码中手动设置用户控件的 DataContext 属性,因为没有主视图模型。那家伙是在虚张声势说知道 MVVM。 The author of this blog has a much more solid understanding.

标签: c# wpf xaml mvvm data-structures


【解决方案1】:

这里有点笼统的答案,但是:

视图模型应该包含关联视图所需的信息并处理视图与模型的交互。这包括填充诸如文本框之类的数据和确定按下按钮时要做什么的函数(命令)。

模型是不直接连接到视图的所有东西。这可能是用于与数据库交互的自定义​​数据类型或类。

模型不应该有 raisepropertychange() 函数 - 更准确地说,它不应该实现 INotifyPropertyChanged 接口。每个视图模型都应该实现 INotifyPropertyChanged,最简单的方法通常是拥有一个基础视图模型类,您的所有视图模型都从该类继承并实现接口。

这是一个good example of the INotifyProperty implementation.,我个人在我的视图模型基类中使用 C#7 标题下的最后一个选项,并从每个属性调用 SetField() 函数。

【讨论】:

    【解决方案2】:

    如果您真的想从头开始学习 MVVM,请尝试 this article (3 parts)。从这里您将获得全局。解释了什么是模型,什么是视图模型,什么是视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      相关资源
      最近更新 更多