【问题标题】:adding a computed property to a wcf client for binding将计算属性添加到 wcf 客户端以进行绑定
【发布时间】: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 中的断点没有被调用,因此表明它没有被调用。

【问题讨论】:

    标签: c# wpf wcf


    【解决方案1】:

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

    【讨论】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

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