10

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

一种解决方法可能是生成 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; }
}

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

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

4

1 回答 1

17

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

于 2012-08-13T20:04:19.203 回答