在EntityObject中的自定义属性上提升PropertyChanged

时间:2010-11-11 14:11:49

标签: .net entity-framework-4 inotifypropertychanged

我在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时,实体框架将抛出​​异常。

2 个答案:

答案 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)之后执行自定义逻辑,并且可以使用它们来更新自定义计算属性的值。