2014-07-01 64 views
0

实体框架6.x与DbContext数据库第一个基础模型(使用Devart的Entity Developer构建(虽然我认为这里没有关系))。OnPropertyChanged在添加新记录时似乎没有被触发

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

当我编辑一个现有的行od数据时,PropertyChanged事件被触发,我可以例如根据刚刚更改的那个变化来设置其他字段的值。这一切正如我所期望的那样。然而,只要我转向实际上将成为新记录的PropertyChanged事件不会被解雇,所以我构建的用于编辑的逻辑更容易不会被新记录实现。

我已经在PropertyChanged事件上放置了断点,我发现它在编辑时触发,但在新行上没有。

我认为在某个地方我错过了一些明显的东西,但我想不出什么。任何人都可以启发我,我需要做些什么才能将它应用到新记录以及编辑现有记录?我在VB一般的代码,但也明白C#(至少是基本!)

感谢

+0

您是否在注册初始化时更改了属性?检查事件处理程序是否为空,如果是这种情况,可能是因为该对象未绑定到UI,因为属性更改仅适用于UI。 –

+0

将其固定到实体本身。特定的实体(通常是我尝试这样做的第一个实体,这使我做出了一般假设)具有一个不会自动设置的复合主键。我正在确保这是首先设置的过程,然后我希望PropertyChanged事件能够正常工作。 –

回答

2

好了,我无法找到关于这个主题的现代信息,但据我所知实体框架实体的集合do not implementINotifyCollectionChanged或任何其他收集通知机制。

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 Observing CollectionChanged

相关问题