我正在学习使用 MVVM 构建应用程序,我有以下情况:
- ViewModel 应该显示类型为 的对象列表
Examination
。该列表将被数据绑定到ListView
视图中的一个,从那里它会被过滤,用户将选择它以ActiveExamination
供进一步使用。 - “存在”在模型层中的存储库应该“表现为域对象的内存中集合”,并在 ViewModel 中实例化。
现在我的问题是:存储库应该是数据绑定到视图的集合,还是应该只是实现 INPC 的属性的“数据源”?例如,从以下可能性中,其中一个是正确的,另一个是错误的,还是两者都错误......?
// example where the list is replaced in order to be changed;
// ViewModel class (part of it)
public class ThisViewModel : ViewModelBase {
public List<Examination> ExaminationList {
get { return _examinationList; }
set { _examinationList = value;
NotifyOfPropertyChange("ExaminationList"); }
}
}
var repo = new ExaminationRepository();
ThisViewModel.ExaminationList = repo.getAll().where(ex => ex.Value > 20).ToList();
第二种选择
// Example where the very property IS a repository
// ViewModel class (part of it)
public class ThisViewModel : ViewModelBase {
// the List is actually a repository in disguise.
IEnumerable _examinationList = new ExaminationRepository();
public List<Examination> ExaminationList {
get { return _examinationList; }
set { _examinationList = value;
// This should be "NotifyOfCollectionChange", I guess...
NotifyOfPropertyChange("ExaminationList"); }
}
}
很可能我在这里很困惑/错误,但是我的应用程序在架构方面相当小且简单,而且我真的不打算使用我见过的与此类问题相关的大多数框架和高级概念(ORM、IoC、 DI),相反,我最关心的是“如何在 WPF/MVVM 数据绑定环境中正确处理可变的、基于存储库的集合”。
编辑:关于我的应用程序的一些上下文:该应用程序是执行临床检查的应用程序。它有一个患者列表,每个患者都有自己的检查。有一个患者存储库和一个检查存储库。当我在 PatientList 中选择一个患者时,该患者的 ExamsList 会显示来自考试 repo 的匹配考试。用户对患者和检查的操作是 CRUD,或者最具体的 BREAD(浏览、阅读、编辑、添加和删除)。
感谢您的任何建议!