WCF重用类型不提高PropertyChanged

时间:2014-04-09 08:55:56

标签: c# wcf

我使用Visual Studio中的添加服务引用功能将服务的代理添加到我的项目中。我还有一个共享程序集(Client,Server),我将其标记为在程序集中重用类型。重用的对象没有像

这样的常见设置器
   set {
         if ((this.PropertyNameField.Equals(value) != true)) {
                    this.PropertyNameField = value;
           ----->   this.RaisePropertyChanged("PropertyName");
          }
       }

相反,只有像setter这样的自动属性没有PropertyChanged事件:

   set {
         this.PropertyNameField = value;
       }

我缺少任何配置选项吗?

编辑: 重用类型继承自实现 INotifyPropertyChanged 的baseobject,并且也在共享程序集中。

1 个答案:

答案 0 :(得分:0)

我自己也遇到了这个棘手的问题。我还没有找到根本问题的修复程序,它阻止了从引用程序集中的类型派生的类中的 INotifyPropertyChanged 实现,但我找到了一种解决方法。在更新服务引用时,它仍然需要对reference.cs进行一些修改,但它比手动将 RaisePropertyChanged 逻辑添加到所有属性设置器要简单得多。

我正在使用Visual Studio 2015,在选择的程序集中重用类型

  1. 在您最初添加服务参考后,启用"显示所有文件"项目选项
  2. 展开解决方案资源管理器中的服务引用条目以公开基础文件
  3. 打开Reference.svcmap文件并更改

    <ExcludedTypes />
    

    <ExcludedTypes>
      <ExcludedType TypeName="ReusedBaseClass" />
    </ExcludedTypes>
    

    其中 ReusedBaseClass 是在共享程序集中实现INotifyPropertyChanged的类。这允许重用所有其他类型,但禁止重用导致该问题的 ReusedBaseClass

  4. 在“服务参考”
  5. 上选择“更新服务参考”选项
  6. reference.cs现在将具有 RaisePropertyChanged 逻辑存在的属性设置器
  7. 现在执行搜索和替换操作,将reference.cs中的 ReusedBaseClass 的本地实现替换为共享程序集中的完全限定的 ReusedBasedClass