将计算属性添加到 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 客户端以进行绑定的主要内容,如果未能解决你的问题,请参考以下文章