2011-05-25 104 views
2

我遇到了一個問題,其中不會爲所有屬性引發生成的Ria Services實體中的 PropertyChanged事件。WCF Ria服務實體和INotifyPropertyChanged

當我看到生成的代碼(客戶端),我可以看到我的實體從實體對象,實現 INotifyPropertyChanged的獲得。我還可以看到,一些屬性,如 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(); 
      } 
     } 
    } 
+1

哪些屬性不會引發PropertyChanged事件?添加一些你的代碼來解釋你的意思 – Jehof 2011-05-26 11:19:24

+0

Jehof,謝謝你的回覆。我只是按照你的要求添加了一些代碼。 – 2011-05-26 13:09:29

回答

3

的PropertyChanged事件封裝在RaiseDataMemberChanged()中。你可以用任何反編譯器(.NET Reflector等)來檢查它。

RaiseDataMemberChanged和RaiseDataMemberChanging方法用於向框架通知有關更改跟蹤和狀態轉換的更改。

這兩個屬性是不同的,導致Id屬性裝飾了Key-Attribute。由於與其他實體的關聯以及不同的自動生成實現,我認爲具有此屬性的屬性會得到特殊處理,因爲不需要跟蹤更改或變更過渡。

所以在你的情況下,我認爲還有另一個問題,爲什麼你的PropertyChanged事件是(可能)沒有被解僱。

+1

你說得對。問題在於其他地方。感謝您的幫助! – 2011-05-27 12:04:47