2012-08-10 13 views
8

SilverLightプロジェクトでFodyを使用して、プロパティの依存関係を自動生成しています。ただし、セッターにすでにRaisePropertyChangedメソッド呼び出しが含まれている場合は機能しません。INotifyPropertyChangedを使用せずにWebサービス参照を生成するには?

回避策は、INotifyPropertyChangedを使用せずにWebサービス参照コードを生成し、代わりに部分的な方法で実装することです。

INotifyPropertyChangedなしでWebサービス参照コードを生成するにはどうすればよいですか?

私はWCFサービスを持っています。それをMaterialService.svcと呼ぶことにしましょう。それは、このようなものになります。私は、サービス参照としてサービスを追加し、クライアントコードを生成すると

[ServiceContract] 
public interface IMaterialService 
{ 
    [OperationContract] 
    Material GetMaterial(int id); 
} 

[DataContract] 
public class Material 
{ 
    [DataMember] 
    public int ID { get; set; } 

    [DataMember] 
    public string Name { get; set; } 
} 

を、すべてのクラスがINotifyPropertyChangedを実装するために設定されている:

public partial class Material : object, System.ComponentModel.INotifyPropertyChanged { 

    private int IDField; 

    private string NameField; 

    [System.Runtime.Serialization.DataMemberAttribute()] 
    public int ID { 
     get { 
      return this.IDField; 
     } 
     set { 
      if ((this.IDField.Equals(value) != true)) { 
       this.IDField = value; 
       this.RaisePropertyChanged("ID"); 
      } 
     } 
    } 

    [System.Runtime.Serialization.DataMemberAttribute()] 
    public System.Nullable<string> Name { 
     get { 
      return this.NameField; 
     } 
     set { 
      if ((this.NameField.Equals(value) != true)) { 
       this.NameField = value; 
       this.RaisePropertyChanged("Name"); 
      } 
     } 
    } 
} 

は、どのように私はdoesnのクライアントコードを生成することができますINotifyPropertyChangedを実装していませんか?

答えて

13

サービス参照を追加した後、サービス参照の下にファイルReference.svcmapを開きます(「プロジェクト」メニューの「すべてのファイルを表示」オプションを有効にする必要があります)。 <EnableDataBinding>要素が見つかり、値をfalseに変更します。これにより、生成されたデータコントラクトからINotifyPropertyChangedが削除されます。

+0

私はFodyと同じ問題を抱えている人のために、私はSimon Croppに連絡し、彼は既存のRaisePropertyChanged呼び出しをサポートする新しいバージョンを作成しました。知っている:) –

関連する問題