C# 生成的reference.cs丢失了INotifyPropertyChanged的代码

C# 生成的reference.cs丢失了INotifyPropertyChanged的代码,c#,reference,inotifypropertychanged,C#,Reference,Inotifypropertychanged,我有一个使用BasicHttpBinding的服务引用,但是当使用VS生成reference.cs时,一些未实现RaisePropertyChanged的属性现在会执行(尽管这是可以接受的),并且会忽略/删除setter中的逻辑(这是非常不可接受的!) 我尝试过以各种不同的方式配置服务引用,并将逻辑放在RaisePropertyChanged事件中,但似乎没有什么能解决这个问题 非常感谢您的帮助,下面是简短的代码 使用中的原始代码 public class Entry : INotifyProp

我有一个使用BasicHttpBinding的服务引用,但是当使用VS生成reference.cs时,一些未实现RaisePropertyChanged的属性现在会执行(尽管这是可以接受的),并且会忽略/删除setter中的逻辑(这是非常不可接受的!)

我尝试过以各种不同的方式配置服务引用,并将逻辑放在RaisePropertyChanged事件中,但似乎没有什么能解决这个问题

非常感谢您的帮助,下面是简短的代码

使用中的原始代码

public class Entry : INotifyPropertyChanged
{

    private string m_Firstname;
    private string m_Foo;

    public string Firstname
    {
        get { return m_Firstname; }
        set
        {
            m_Firstname = value;

            Foo = "bar";

            OnPropertyChanged("Firstname");
        }
    }

    public string Foo
    {
        get { return m_Foo; }
        set { m_Foo = value; }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null))
        {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }

}
在Reference.cs中生成的代码

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1586.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.domain.com/")]
public partial class Entry : object, INotifyPropertyChanged {

    private string firstnameField;
    private string foo;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public string Firstname {
        get { return this.preferredContactMethodField; }
        set {
            this.firstnameField = value;
            this.RaisePropertyChanged("Firstname");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=2)]
    public string Foo {
        get { return this.foo; }
        set {
            this.foo= value;
            this.RaisePropertyChanged("Foo");
        }
    }


    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}
//
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Xml”,“4.6.1586.0”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(命名空间=”http://www.domain.com/")]
公共部分类条目:对象,INotifyPropertyChanged{
私有字符串firstnameField;
私人字符串foo;
/// 
[System.Xml.Serialization.XmlElementAttribute(顺序=1)]
公共字符串名{
获取{返回this.preferredContactMethodField;}
设置{
this.firstnameField=值;
本.RaiseProperty变更(“名字”);
}
}
/// 
[System.Xml.Serialization.XmlElementAttribute(顺序=2)]
公共字符串Foo{
获取{返回this.foo;}
设置{
这个.foo=值;
本.RaisePropertyChanged(“Foo”);
}
}
公共事件System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
受保护的void RaisePropertyChanged(字符串propertyName){
System.ComponentModel.PropertyChangedEventHandler propertyChanged=this.propertyChanged;
如果((propertyChanged!=null)){
propertyChanged(这是新的System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
请注意,在Firstname setter中设置Foo的尝试已经消失,并且出现了在Foo setter中更改的raiseProperty

据我所知,这是生成Reference.cs文件的过程的一部分,我无法完成我的原始代码,尤其是设置Foo的尝试,对吗


提前感谢

添加服务引用时,将从服务界面自动生成客户端类型。您的特定逻辑是内部实现的一部分,服务客户机对此一无所知

如果希望在客户机中具有此行为,则不应手动更改生成的代码。无论何时更新引用,它都将被覆盖


唯一可靠的解决方案是在单独的程序集中隔离服务类型,并在服务引用中使用此程序集。要执行此操作,请单击高级。。。创建或更新引用并将程序集包括在通过将其添加到“使用这些程序集的类型”列表而打开的对话框中时单击

抱歉,应该提到这是一个web服务(asmx)和标准服务引用,而不是.svc,这是我认为这是一个选项的唯一方式。您也可以使用asmx服务添加服务引用。