将计算属性添加到 wcf 客户端以进行绑定

Posted

技术标签:

【中文标题】将计算属性添加到 wcf 客户端以进行绑定【英文标题】:adding a computed property to a wcf client for binding 【发布时间】:2012-12-02 05:12:28 【问题描述】:

我已经导入了一个 wsdl,现在我拥有了所有的客户端类。 我想为类添加一个额外的(计算的)属性以用于 wpf 绑定。我希望计算的属性与从服务器返回的属性(并基于)一起显示(在网格中)

对我来说,合乎逻辑的事情是创建一个部分类,与 wcf 生成的类相同的命名空间和类名,并将新的计算属性添加到这个部分类

    namespace TestClient.WSCompanySearch  //same namespace as the generated class from wsdl
    
        public partial class Company  //same class returned by wsdl
        
            public bool IsValid
            
                get 

                    if ((this.CloseDate < DateTime.Now) || (this.Rooms == 0))
                    
                        return false;
                    
                    else
                    
                        return true;
                    
                
                                   
        
    

这个额外的属性肯定存在,如果我对其进行编码,我可以看到它,但是当我绑定时,就好像自定义属性被忽略了一样。 getter 中的断点没有被调用,因此表明它没有被调用。

【问题讨论】:

【参考方案1】:

您可以通过对需要计算属性的列使用转换器来获得相同的结果。

【讨论】:

这就是您可以将行绑定到的对象发送到转换器***.com/questions/4335068/… 的方式,并且在转换器的 Convert 方法中,您可以插入您在 Getter 中拥有的代码 我假设您没有将网格设置为 AutoGenerateColumns,因此您只需添加一个新列,在其中指定绑定中的转换器 谢谢。我设法让我的方法最终发挥作用。感谢您的帮助【参考方案2】:

最后我的方法是正确的。 只是一个组合

    我的逻辑在新属性中不正确 我需要关闭“仅我的代码”调试才能使新类中的断点正常工作。我猜 VS 认为它是生成代码的一部分,不想调试它

【讨论】:

【参考方案3】:

遇到同样的问题,我必须添加一个私有 set 方法才能反序列化对象

【讨论】:

你可以在自定义属性中添加[XmlIgnore]属性到Deserializer忽略它 这是与此问题相关的相反情况,您有一个要反序列化的只读属性 正如我所说,它对我有用。如果我从在部分类中创建的自定义公共属性中删除那些 [XmlIgnore] 属性,则在尝试反序列化时会出现错误。如果我将它们添加回来,一切都会好起来的。我认为这是合理的,因为 Xml Deserializer 对那些“新”属性一无所知,然后 [XmlIgnore] 照它说的做。 (请原谅我的英语)

以上是关于将计算属性添加到 wcf 客户端以进行绑定的主要内容,如果未能解决你的问题,请参考以下文章

Svelte:如何将格式化的输入字段绑定到属性

vue2.0--计算属性

Ember 计算属性在绑定到深度嵌套的属性时不会触发

以编程方式添加到核心数据实体(如 IB 绑定“添加”)

如何创建将 1 添加到属性的 Ember 计算属性?

如何将值绑定到类属性?