OnPropertyChanged在添加新记录时似乎不会被触发

本文关键字:添加 新记录 OnPropertyChanged | 更新日期: 2023-09-27 18:10:59

实体框架x与DbContext数据库首先基于模型(建立与Devart的实体开发(虽然我认为这是无关的))。

数据模型和与之相关的所有业务代码都在其自己的独立项目中,并且所有实体都设置为实现INotifyPropertyChanged和Changing。PropertyChanged和PropertyChanging事件在每个实体的单独的部分类中处理。

当我编辑现有的行数据时,PropertyChanged事件被触发,例如,我可以根据对刚刚更改的字段的更改设置其他字段的值。这一切都和我预期的一样。然而,一旦我移动到实际上将是一个新记录的PropertyChanged事件不会被触发,因此我为使编辑更容易而构建的逻辑不会为新记录实现。

我在PropertyChanged事件上设置了断点,我看到它在编辑时触发,而不是在新行上触发。

我推测我在某个地方错过了一些明显的东西,但我想不起来是什么。有没有人可以启发我,我需要做些什么,让这适用于新的记录,以及编辑现有的?我通常用vb编写代码,但也了解c#(至少是基本的!)

谢谢

OnPropertyChanged在添加新记录时似乎不会被触发

嗯,我找不到任何关于这个主题的现代信息,但据我所知实体框架实体集合不实现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