WCF DataContracts 中的 INotifyPropertyChanged

Posted

技术标签:

【中文标题】WCF DataContracts 中的 INotifyPropertyChanged【英文标题】:INotifyPropertyChanged in WCF DataContracts 【发布时间】:2011-09-29 00:17:41 【问题描述】:

我正在制作一些 WCF 服务,其中一些消费者是 Prism 应用程序。

为了避免将 DataContract 类复制到客户端类,他们希望合约支持 INotifyPropertyChanged。

但是,我有一些客户端是 MVC3 客户端。

向数据合约添加 INotifyPropertyChanged 支持会搞砸它们吗?

另外,我计划让我的 DataContracts 也成为我的 Entity Framework 数据库连接中的 POCO 对象。 INotifyPropertyChanged 会搞砸吗?

还是 INotifyPropertyChanged 只是 WPF 的事情,其他应用程序不会关心它?

【问题讨论】:

【参考方案1】:

还是 INotifyPropertyChanged 只是 WPF 的事情,其他应用程序不会关心它?

INotifyPropertyChanged 只是一个接口,您可以在实体上实现它而不会弄乱任何东西。它主要与 WPF 和 Silverlight 一起使用,并且不会对不使用它的其他技术产生影响。因此,在您的 WCF 数据合同上实施它应该没有任何问题。尽管请注意,当您从此 WCF 服务(使用 svcutil.exe 或添加服务引用)生成强类型客户端代理时,生成的实体将不会实现此接口。他们将是 POCO。

【讨论】:

我相信 WCF 添加引用设置和 svcutil.exe 中有一个选项可以让您生成实现 INotifyPropertyChanged 的​​类。 另外,如果您通过项目使用“添加服务引用”选项,生成的代码会自动实现 DataContracts 上的INotifyPropertyChanged 接口。【参考方案2】:

另一种选择是在 WPF 应用程序中使用 MVVM。 DataContract 将是模型 (M),而 WPF 应用程序的开发人员必须创建 ViewModel。

ViewModel 必须实现 INotifyPropertyChanged 并将从 Model 加载其数据。

【讨论】:

以上是关于WCF DataContracts 中的 INotifyPropertyChanged的主要内容,如果未能解决你的问题,请参考以下文章

将 DataMember 添加到 WCF 中的现有 DataContract

为啥 .Net 4.0 构建客户端 DataContracts 会导致 .Net 4.5 应用程序中的 MethodAccessException?

如何在 WCF 测试客户端 (WcfTestClient.exe) 中指定列表参数?

何时/为啥不应该在我的 DataContracts 上使用 IsReference=true?

使用 jQuery.post 将多个参数发布到 MVC 控制器

批处理删除文件夹下所有文件和文件夹,但是排除包含“勿删”字样的文件夹,该怎么写?