C# 架构帮助:定制json Web服务的wpf/mvvm数据输入前端

C# 架构帮助:定制json Web服务的wpf/mvvm数据输入前端,c#,architecture,mvvm,data-entry,C#,Architecture,Mvvm,Data Entry,我发现自己有一点无架构的问题:我正在从事一个小型项目,其中包括数据输入和持久性,DAL使用带有自定义JSON协议的Web服务。到目前为止,一切都很好,将一些快速而肮脏的DataTable+DataGrid代码拼凑起来并使用它将是一件相对简单的事情 然而,这是一个学习项目,我正试图找出如何使用Caliburn.Micro框架进行更简洁的设计,特别是使用WPF gui的MVVM。服务器部分是固定的,但我正在做整个客户端部分,包括DAL 使用DG+DT组合,在DG中进行大量编辑非常容易,当用户提交时,

我发现自己有一点无架构的问题:我正在从事一个小型项目,其中包括数据输入和持久性,DAL使用带有自定义JSON协议的Web服务。到目前为止,一切都很好,将一些快速而肮脏的
DataTable
+
DataGrid
代码拼凑起来并使用它将是一件相对简单的事情

然而,这是一个学习项目,我正试图找出如何使用Caliburn.Micro框架进行更简洁的设计,特别是使用WPF gui的MVVM。服务器部分是固定的,但我正在做整个客户端部分,包括DAL

使用DG+DT组合,在DG中进行大量编辑非常容易,当用户提交时,只需迭代
,检查
行状态
属性,并根据需要触发创建/更新/删除DAL方法<代码>数据表似乎对MVVM数据绑定不太友好,但是,所涉及的ViewModels不应该关心与它们一起使用的是哪种UI控件。。。由于持久性是通过Web服务实现的,因此要求批量提交修改似乎是合理的

所以我在思考我的设计选项是什么

据我所知,DAL应该处理模型层对象(我认为没有必要在这个项目中引入DTO),这些对象在编辑器ViewModels中数据绑定之前将被包装在ViewModels中

到目前为止,我能想到的最好的办法是在启动编辑器ViewModel时克隆要编辑的项集合,然后在提交时根据副本检查数据绑定集合-这将让我检测到新的/修改的/删除的对象,但似乎有些乏味

我还玩弄了保存
IsModified
IsNewlyCreated
属性的想法(我猜这些属性会出现在ViewModel中?)-跟踪删除的项目可能可以通过将可编辑项目保存在
ObservableCollection
中,处理
CollectionChanged
事件,以及将已删除的项目添加到单独的列表中

如你所见,我很不确定如何处理这个问题,任何建议都将不胜感激:)

首先

1-不要做任何更改,直到你达到一个没有代码更改就无法生存的地步

2-正如你已经说过的,你正在创建一个学习项目,你想要更多的模块化应用程序,所以我的想法将围绕如何使我的应用程序更模块化,然后再深入实施细节

3-您是否考虑过使用Prism+MVVM框架

4-我仍然建议,在ViewModel中,您仍然可以使用DataTable将数据绑定到网格,并且使用DataTable.GetChanges()方法将提供表中的所有更改,因此您不需要维护像IsNew或IsModified这样的布尔变量


5-如果您还不确信使用DataTable,请使用ObservrableCollection将数据绑定到网格。ObservrableCollection不会通知单个项目的更改,它只会在添加或删除项目时通知

1:设计/原型阶段,变更很好。3:Caliburn.micro framework,不知道Prism会给我什么?4:可以,但感觉有点脏,需要在表和模型对象之间来回转换。5:是的,BindingList会给我项目修改通知,但对于已删除的项目有非常无用的通知(删除后删除项目的索引)