【问题标题】:Change referenceequals to equals in reference.cs在reference.cs中将referenceequals更改为equals
【发布时间】:2010-12-16 23:05:09
【问题描述】:

我有一个使用 wcf 网络服务的 wpf 应用程序。它是我的网络服务和应用程序,所以我可以对任何一方进行更改。在 Visual Studio 自动生成的 Reference.cs 文件中,它将此代码用于属性更改事件:

[System.Runtime.Serialization.DataMemberAttribute()]
    public string Value {
        get {
            return this.ValueField;
        }
        set {
            if ((object.ReferenceEquals(this.ValueField, value) != true)) {
                this.ValueField = value;
                this.RaisePropertyChanged("Value");                    
            }
        }
    }

虽然我真正想要的是字符串:

[System.Runtime.Serialization.DataMemberAttribute()]
    public string Value {
        get {
            return this.ValueField;
        }
        set {
            if ((object.ReferenceEquals(this.ValueField, value) != true)) {
                if (this.ValueField != value)
                {
                    this.ValueField = value;
                    this.RaisePropertyChanged("Value");
                }
            }
        }
    }

这样,如果值相同,属性更改事件就不会发生。为什么这是一个问题是因为我监听文本框的 OnPreviewTextInput 并以编程方式更改值,然后事件发生两次,一次是因为我更改了它,一次是因为 wpf 通过绑定更改了它。

谢谢,

【问题讨论】:

    标签: wpf wcf binding propertychanged


    【解决方案1】:

    如果您同时控制服务器和客户端,则可以在单独的程序集中定义您的类型,然后您可以从两个项目中引用它。

    在 WCF 参考添加对话框高级设置中,您可以告诉它重用类型,然后它将使用客户端公共程序集中存在的数据对象的任何实现。

    【讨论】:

    • 根据我的解决方案如何拆分不起作用,有没有办法覆盖自动生成的reference.cs文件中的方法?
    • @odyth - 当没有其他选项出现时,我有时会编辑 reference.cs 文件。在这些情况下的问题是,您必须记住您编辑了文件,并在更改时再次进行相同的更改。
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 2021-05-14
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多