Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-如何为任何属性引发OnChange?_C#_Wpf_Entity Framework_Mvvm_Entity Framework 4 - Fatal编程技术网

C# 实体框架-如何为任何属性引发OnChange?

C# 实体框架-如何为任何属性引发OnChange?,c#,wpf,entity-framework,mvvm,entity-framework-4,C#,Wpf,Entity Framework,Mvvm,Entity Framework 4,在WPF/EF4.0/MVVM应用程序中,我有一个编辑客户实体的视图。在我的CustomerServiceWModel中设置属性“bool IsCustomerInEditMode”的最佳方法是什么,而不是对实体的每个单独属性执行onchange/OnChanged partial方法?据我所知,没有单一的改变方法 谢谢 编辑:回答:EntityState编辑: 在帖子中回答您的问题(设置bool IsCustomerInEditMode的最佳方式)- 订阅entity.PropertyChan

在WPF/EF4.0/MVVM应用程序中,我有一个编辑客户实体的视图。在我的CustomerServiceWModel中设置属性“bool IsCustomerInEditMode”的最佳方法是什么,而不是对实体的每个单独属性执行onchange/OnChanged partial方法?据我所知,没有单一的改变方法

谢谢

编辑:回答:EntityState

编辑: 在帖子中回答您的问题(设置bool IsCustomerInEditMode的最佳方式)-

订阅entity.PropertyChange事件,在该事件中设置IsCustomerInEditMode==true; 订阅entity.PropertyChanged事件,在其内部设置IsCustomerInEditMode==false

我认为InstanceOfYourCustomer.Property更改和InstanceOfYourCustomer.Property更改了您要查找的事件。对于实体上生成的每个属性,如果属性发生更改,则会触发事件(除非使用分部类向实体添加其他属性,在这种情况下,需要在这些属性的设置器中添加对ReportPropertyChanged和ReportPropertyChanged的调用)


我正在使用EF4,正在查看Model.Designer.cs文件。。。我所有的实体“属性”设置器都调用ReportPropertyChanged和ReportPropertyChanged。。。这将在您的实体上触发PropertyChanged和PropertyChanged事件,参数甚至会告诉您引发更改事件的特定属性。

Scott,谢谢您的回答。我可以看到customerInstance.PropertyChange事件。这可能是我想做的事情的关键。您看到的ReportPropertyChange调用用于单个属性,而不是整个实体。我还不确定,但我相信我要找的是EntityObject.EntityState,报告已修改,我可以将其分配给我的IsCustomerInEditMode属性。很高兴您能够解决此问题!我可能错了,但我认为ReportPropertyChange引发了实际实体的PropertyChangingEvent。我意识到这个调用的参数是正在更改的实体的特定属性的字符串值,但是我认为这就是PropertyChange事件的事件参数可以指定实体的哪个属性实际导致事件触发的原因(因为我们无法知道其他情况)。无论如何,听起来EntityState对您来说会更好,因为您似乎希望它在提交之前处于“编辑状态”。我将Scott的答案标记为正确,因为它回答了我的一个问题-如何获取在任何标量属性发生更改时报告更改的属性。但是,我的问题的答案是(问得很糟糕,我知道)是使用IsCustomerInEditMode=SelectedCustomer.EntityState==EntityState.Modified)| |(SelectedCustomer.EntityState==EntityState.Added)的可能重复项