您好我正在尝试学习MVVM,我对某些部分有点不确定,主要是(数据)模型需要与VM通信的部分(ViewModel)。
所以我有一个班级人员,它有很多属性(使用Raiseproperty(INotifyPropertyChanged))。现在我如何将该类连接到VM我将创建一个新类并将其称为ViewModelPerson,但我主要想要一个人员列表,因为只显示一个人有点无用,该列表将从数据库中收集(SQLite与Dapper。现在我需要在viewmodel或(data)模型中创建可观察列表?我想在ViewModel中,因为我需要将它绑定到View,但是我在哪里将数据库信息插入到ViewModel ObservableCollection中?我是否将它放在构造函数中,如ViewModelPersonsList构造函数,它具有一个Query以从SQlite DB收集所有人并将其插入列表中???
希望您了解我未能理解MVVM模型的地方,如果有什么不清楚的地方请问,我会尝试更好地解释我的问题。
马克西姆
答案 0 :(得分:1)
查看 - >查看模型 - >业务逻辑 - >数据层 - > DB
OR
查看 - >查看模型 - > WCF / Web服务 - >业务逻辑 - >数据层 - > DB
如果您的视图模型需要Person对象列表,那么它应该调用您的业务逻辑层,并且您的BLL将围绕调用数据层实现必要的逻辑。您的BLL返回列表,您的VM通过绑定使其可用于视图。
更新 Person对象的工作方式相同。 VM只使用更新的对象调用BLL。
答案 1 :(得分:1)
由于我看到你提到了Sqlite,我假设你在谈论小型WPF项目。
我建议你创建一个映射到你的数据库的实体框架代码优先模型(阅读this)。
如果你想使用SQL Server Compact Edition,你甚至可以拥有数据库generated for you(这也可以通过Sqlite实现,但需要付出更多努力)。
无论如何,您可以使用生成的(或编码的)DbContext
作为UoW对象。
您可以选择通过DAL单独处理数据,也可以直接从ViewModel处理数据。
任何情况下,我会说创建两个ViewModel基类,一个暴露TEntity,另一个暴露TEntity集合。 如果您选择在VM中执行DAL操作,则可以将CRUD方法添加到基础CollectionViewModel上,然后手动调用或让用户通过公开命令调用它。