我的桌面 WPF 应用程序有一个存储库(类型为Person
),它位于模型层中,并由一个 ViewModel 调用,该 ViewModel 具有一个PersonList
数据绑定到DataGrid
.
当我打开我的应用程序时,默认情况下会显示该列表。在初始化期间,以下代码适用:
public class PersonScreenViewModel : ViewModelBase
{
PersonRepository _person_repository;
public ObservableCollection<Person> PersonList { get; set; }
public PersonScreenViewModel() {
_repositorio_pacientes = new RepositorioPacientes();
PersonList = new ObservableCollection<Person>(_person_repository.GetAll());
}
// ... ///
}
我的怀疑是基于一些难以理解如何实现“保存/更新”方法的。
每个关于存储库模式的文本都告诉我们“存储库的行为应该像 [实体 | 域对象] 的集合”。因此,最合乎逻辑的做法是将存储库本身数据绑定到DataGrid
. ObservableCollection
如果我创建了一个继承并实现存储库逻辑的类,则可以做到这一点。目前,我所做的是使用 获取存储库项目的副本_repo.GetAll()
,并在该副本中工作,在我的更改完成后必须提交回来。
具体来说,我的工作流程涉及在 DataGrid 中选择一行,更改所选对象的某些属性,并提交这些更改,并期望相同的对象与新的属性值一起保留。
通常,如果您在集合中获取一个对象并对其进行修改,则不需要“更新”任何内容,因为您已经更改了对象本身。
问题是:“我如何将我的视图数据绑定到存储库本身?存储库是否应该继承自ObservableCollection
?它应该如何完成?我的推理的某些部分有缺陷吗?”
重要的是要说我的应用程序不是面向数据的,Person
类是非常基本的(POCO 标记为[Serializable]
,具有一些属性),并且我的存储库使用纯 XML 序列化和文件系统结构。
谢谢阅读!