OnPropertyChanged在添加新记录时似乎不会被触发
本文关键字:添加 新记录 OnPropertyChanged | 更新日期: 2023-09-27 18:10:59
实体框架x与DbContext数据库首先基于模型(建立与Devart的实体开发(虽然我认为这是无关的))。
数据模型和与之相关的所有业务代码都在其自己的独立项目中,并且所有实体都设置为实现INotifyPropertyChanged和Changing。PropertyChanged和PropertyChanging事件在每个实体的单独的部分类中处理。
当我编辑现有的行数据时,PropertyChanged事件被触发,例如,我可以根据对刚刚更改的字段的更改设置其他字段的值。这一切都和我预期的一样。然而,一旦我移动到实际上将是一个新记录的PropertyChanged事件不会被触发,因此我为使编辑更容易而构建的逻辑不会为新记录实现。
我在PropertyChanged事件上设置了断点,我看到它在编辑时触发,而不是在新行上触发。
我推测我在某个地方错过了一些明显的东西,但我想不起来是什么。有没有人可以启发我,我需要做些什么,让这适用于新的记录,以及编辑现有的?我通常用vb编写代码,但也了解c#(至少是基本的!)
谢谢
嗯,我找不到任何关于这个主题的现代信息,但据我所知实体框架实体集合不实现INotifyCollectionChanged或任何其他集合通知机制。
INotifyPropertyChanged被设计用来通知属性值的变化。当你有一个集合属性,比如
public ICollection<MyEntity> SomeEntities
{
get {...}
set {... PropertyChanged(this, ...);}
}
有人用它来添加实体
entityContainer.SomeEntities.Add(new MyEntity());
则不会引发PropertyChanged
,因为实际属性仍然是相同的集合—没有使用setter方法。
ICollection<MyEntity>
本身必须实现INotifyCOllectionChanged
接口(如ObservableCollection<T>
)
如果你想在你的操作的不同部分之间有通知机制,你应该把你的查询包装到一些INotifyCollectionChanged
实现者,委托删除和添加到DataContext - EntityFramework EntityCollection观察CollectionChanged