【发布时间】:2017-07-05 13:02:36
【问题描述】:
我正在使用 caliburn.micro 编写一个 WPF 应用程序来处理数据库。我正在使用实体框架和数据库优先方法(因为我已经有一个数据库)来生成类。是否可以使实体框架生成将继承 caliburn 的 PropertyChangedBase 类的类,或者使它们实现 IHandle 接口。我需要这些类来让视图知道数据何时更改。
【问题讨论】:
-
我建议您保留 EF POCO 模型(即“普通旧类对象”),并让视图模型实现 PropertyChangedBase,并管理模型是否“脏”和过时,或不等。
-
@Joe 的问题是,如果在您的视图模型中您有一个未实现 PropertyChanged 的类,并且该类的属性已更改,则不会对其进行更新。如果您仅在视图模型中实现 PropertyChanged,它只会在您更改整个类(新建或替换引用)时触发
-
这就是为什么不可变模型更好!目前模型什么时候改变?当然,您最终会得到来自不同 EF dbContext 的不同模型实例(因此更改不会通过属性通知传播)?
-
@Joe 我的意思是如果你的虚拟机有一个类型为 Person 的属性(一个表)并且你绑定到 person.Name (所述表的一个列),并且你改变了属性(名称),viewmodel 不会触发 PropertyChanged 事件,因为它认为它的属性(即 Person 类)从未改变
-
啊,我明白了。纯粹的 MVVM 方法是镜像 VM 中的属性。该模型具有属性名称。 VM 具有属性名称并实现通知。如果您想实现“保存/撤消”,这可能很有用。保存将属性应用于模型,撤消使用模型将它们恢复。维持起来更痛苦,但在做了这两件事之后,我确实喜欢这种分离。信息太多我会写一个答案(即使它不是专门针对问题的答案)。
标签: c# wpf entity-framework entity caliburn