2014-07-01 66 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

相關問題