如何在没有INotifyPropertyChanged的情况下生成Web服务引用?

Gei*_*erg 9 .net c# silverlight wcf inotifypropertychanged

我在SilverLight项目中使用Fody来自动生成属性依赖项.但是,如果setter已包含RaisePropertyChanged方法调用,则它不起作用.

解决方法可能是生成Web服务引用代码INotifyPropertyChanged,而不是在部分方法中实现它.

如何在没有生成Web服务引用代码的情况下INotifyPropertyChanged

我有一个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; }
}
Run Code Online (Sandbox Code Playgroud)

当我将服务添加为服务引用并生成客户端代码时,每个类都设置为实现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");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何生成未实现的客户端代码INotifyPropertyChanged

car*_*ira 16

添加服务引用后,在服务引用Reference.svcmap下打开该文件(您可能需要在"项目"菜单中启用"显示所有文件"选项).找到<EnableDataBinding>元素,并将值更改为false.这将从INotifyPropertyChanged生成的数据合同中删除.