【问题标题】:WCF Reuse Types not raising PropertyChangedWCF 重用类型不提高 PropertyChanged
【发布时间】:2014-04-09 08:55:55
【问题描述】:

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

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

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

   set {
         this.PropertyNameField = value;
       }

我是否缺少任何配置选项?

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

【问题讨论】:

  • 如何生成在程序集中重用类型
  • 我正在创建一个 silverlight 应用程序,因此共享程序集是一个 silverlight 类库,其中的对象作为 Add as Link 从一个公共类库中插入。
  • 为什么不给base.RaisePropertyChanged("PropertyName");打电话?
  • 因为我正在自动生成我的代理,并且我总是会在 Update Service Reference 之后调整自动生成的代理
  • 当我问你如何生成它们时,这就是我想知道的;)

标签: c# wcf


【解决方案1】:

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

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

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

    <ExcludedTypes />
    

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多