2010-08-11 82 views
1

在WPF/EF4.0/MVVM應用程序中,我有一個View來編輯Customer實體。在我的CustomerViewModel中設置屬性「bool IsCustomerInEditMode」的最佳方法是對實體的每個單獨屬性的OnChanging/OnChanged部分方法作用不足?據我知道有沒有OnEntityChanging方法...實體框架 - 如何爲任何屬性添加OnChanging?

謝謝!

編輯答案:EntityState

+0

我標誌着斯科特的答案是正確的,因爲它回答了我的問題之一 - 如何得到,如果任何標量屬性更改,報告的屬性發生更改.____然而,回答我的問題(問很差,我承認)是使用IsCustomerInEditMode = SelectedCustomer.EntityState == EntityState.Modified)|| (SelectedCustomer.EntityState == EntityState.Added)的 – 2010-08-11 20:41:44

+0

可能重複[實體框架:如何提高對物權變動的事件](http://stackoverflow.com/questions/5623000/entity-framework-how-to-raise - 財產變更事件) – Matt 2015-09-18 10:27:40

回答

3

編輯: 要回答你的問題在您的文章(設置布爾IsCustomerInEditMode最好的辦法) -

訂閱entity.PropertyChanging事件,它裏面設置IsCustomerInEditMode ==真正; 訂閱entity.PropertyChanged事件,在其中設置IsCustomerInEditMode == false;

我覺得InstanceOfYourCustomer.PropertyChanging和InstanceOfYourCustomer.PropertyChanged你正在尋找的事件。關於你的實體每個生成的屬性,事件觸發,如果屬性改變的(除非您使用部分類附加屬性添加到您的實體,在這種情況下,你需要調用這些屬性的制定者添加到ReportPropertyChanging和ReportPropertyChanged )。

http://msdn.microsoft.com/en-us/library/system.data.objects.dataclasses.structuralobject.propertychanged.aspx

http://msdn.microsoft.com/en-us/library/system.data.objects.dataclasses.structuralobject.propertychanging.aspx

我使用EF4,看着我的Model.Designer.cs文件......我所有的實體屬性制定者的來電ReportPropertyChanging和ReportPropertyChanged ...這將觸發實體上的PropertyChanging和PropertyChanged事件,並且參數甚至會告訴您哪個特定屬性引發了更改後的事件。

+0

Scott, 感謝您的回答。我可以看到customerInstance.PropertyChanging事件。這可能是我嘗試去做的關鍵。 您看到的ReportPropertyChanging調用是針對單個屬性而不是整個實體。 我不知道,但是我相信我所尋找的是EntityObject.EntityState該報告修改,我會分配給我的IsCustomerInEditMode財產。 – 2010-08-11 20:08:38

+0

很高興你能解決這個問題!我可能是錯的,但我認爲ReportPropertyChanging引發了實際的實體的PropertyChangingEvent。我意識到這個調用的參數是正在改變的實體的特定屬性的字符串值,但我認爲這是因爲PropertyChanging事件的事件參數可以指定實體actualy的哪個屬性導致事件觸發因爲我們沒有辦法知道否則)。無論如何,它聽起來像EntityState會更好,因爲看起來你希望它處於'編輯狀態',直到它被提交。 – Scott 2010-08-11 20:59:25

相關問題