我在EntityObject上有几个自定义计算属性。我想触发PropertyChanged事件来通知所有绑定。但是,这不起作用,当我使用ReportPropertyChanged时它引发了一个争论:
De eigenschap姓名heeft geen geldige entiteitstoewijzing op het entiteitsobject。 Zie de documentatie van Entity Framework voor meer informatie。
这意味着Name
不是实体属性,我应查看实体框架文档以获取更多信息。有没有办法调用该事件并让实体框架忽略它?
代码示例:
partial class Preset
{
public string Name
{
get
{
if (this.SystemPreset)
return Translate("preset_" + this.Name_Original + "_name");
else
return this.Name_Original;
}
set
{
if (!value != this.Name_Internal)
{
this.Name_Internal = value;
ReportPropertyChanged(Name);
}
}
}
}
属性Name是自定义属性。当我尝试通过EntityObject中的方法ReportPropertyChanged触发PropertyChanged时,实体框架将抛出异常。
答案 0 :(得分:4)
您应该可以从自定义属性设置器中调用OnPropertyChanged("YourPropertyName")
(msdn),WPF会将其选中。
这适用于Visual Studio 2010,.NET 4.0与SQLServer CE数据库通信(我认为它是实体框架4,但我不确定)。
答案 1 :(得分:1)
ReportPropertyChanged 不适合您使用,以便EF通知 ObjectStateManager 更改该对象的 CurrentValues ,以便它可以跟踪当我们在 ObjectContext 上调用 SaveChanges 时,更改并生成适当的SQL命令。
也就是说,每个实体的每个标量属性都有自己的2个部分方法版本供您实施: On [Property] Changed 和 在[属性]更改 即可。
PropertyChanging和PropertyChanged没有默认实现;只是声明。这使您有机会在属性即将更改(PropertyChanging)时以及在属性值更改(PropertyChanged)之后执行自定义逻辑,并且可以使用它们来更新自定义计算属性的值。