WCF Ria服务实体和INotifyPropertyChanged

| 我遇到一个问题,即不是针对所有属性都引发了从生成的Ria Services实体产生的PropertyChanged事件。 当查看生成的代码(客户端)时,可以看到我的实体是从实现INotifyPropertyChanged的Entity对象派生的。我还可以看到某些属性(例如Id属性)引发了PropertyChanged事件,但有些却没有。 我没有使用任何T4模板,因此使用了默认模板。 所以,我的问题是: 我是否可以设置选项/属性,以便针对生成的客户端实体的任何属性引发PropertyChanged事件? 任何帮助,将不胜感激。 编辑: 这是自动生成的客户端文件中的一个属性示例,它不会引发PropertyChanged事件:
    [DataMember()]
    [Required()]
    [StringLength(50)]
    public string FirstName
    {
        get
        {
            return this._firstName;
        }
        set
        {
            if ((this._firstName != value))
            {
                this.OnFirstNameChanging(value);
                this.RaiseDataMemberChanging(\"FirstName\");
                this.ValidateProperty(\"FirstName\", value);
                this._firstName = value;
                this.RaiseDataMemberChanged(\"FirstName\");
                this.OnFirstNameChanged();
            }
        }
    }
这就是模型服务器端中定义的内容:
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.String FirstName
    {
        get
        {
            return _FirstName;
        }
        set
        {
            OnFirstNameChanging(value);
            ReportPropertyChanging(\"FirstName\");
            _FirstName = StructuralObject.SetValidValue(value, false);
            ReportPropertyChanged(\"FirstName\");
            OnFirstNameChanged();
        }
    }
这是自动生成的客户端文件中的一个属性示例,它确实引发了PropertyChanged事件:
    [DataMember()]
    [Editable(false, AllowInitialValue=true)]
    [Key()]
    [RoundtripOriginal()]
    public Guid Id
    {
        get
        {
            return this._id;
        }
        set
        {
            if ((this._id != value))
            {
                this.OnIdChanging(value);
                this.ValidateProperty(\"Id\", value);
                this._id = value;
                this.RaisePropertyChanged(\"Id\");
                this.OnIdChanged();
            }
        }
    }
这就是模型服务器端中定义的内容:
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Guid Id
    {
        get
        {
            return _Id;
        }
        set
        {
            if (_Id != value)
            {
                OnIdChanging(value);
                ReportPropertyChanging(\"Id\");
                _Id = StructuralObject.SetValidValue(value);
                ReportPropertyChanged(\"Id\");
                OnIdChanged();
            }
        }
    }
    
已邀请:
PropertyChanged事件封装在RaiseDataMemberChanged()中。您可以使用任何反编译器(.NET Reflector等)进行检查。 RaiseDataMemberChanged和RaiseDataMemberChanging方法用于通知框架有关更改跟踪和状态转换的更改。 这两个属性是不同的,因为Id属性用Key-Attribute装饰。我认为具有此属性的属性会得到特殊处理,这是由于与其他实体的关联以及不同的自动生成的实现,导致无需跟踪更改或更改时的过渡。 因此,在您的情况下,我认为还有另一个问题,为什么您的PropertyChanged事件(可能)未触发。     

要回复问题请先登录注册