2013-06-29 49 views
2

我在WPF中使用MVVM模式来创建程序。如何让由Entity Framework生成的类实现INotifyPropertyChanged?

我在我的模型类上和平执行INPC ....直到前几天我决定使用EntityFramework。现在我不知道如何告诉EntityFramework在生成的实体类上实现INPC,并在每次属性更改时都引发属性更改的事件。

this

其他问题,只是建议落实视图模型INPC,但我真的希望模型类来实现INPC减少工作量。

我正在使用Model-first方法来生成我的模型。

+0

您可以更改模型生成的T4模板以实现INPC。这是一个相当漫长的过程,因为有很多事情要改变(主要是生成后台字段和Getter/Setter)。 –

+0

@SimonBelanger你可以发布一个链接到演练,教程或示例,它可以告诉我如何使用T4模板做到这一点? Thx非常帮助。 –

+0

这似乎是一个很好的开始:http://pjgcreations.blogspot.ca/2012/12/enabling-mvvm-inotifiypropertychanged.html –

回答

2

最近发布的Microsoft Prism的“Unity容器”通过它的“行为拦截”功能直接解决了这个问题。使用该功能可以使任何类BEHAVE好像它从INotifyPropertyChanged继承。

对这个功能最引人注目的吸引力是你的EF课程可以保持幸福感并不知道发生了什么,并且不需要为了工作而进行手动编码修改。正如您所预料的那样,您需要根据自己的需求来衡量性能。

你可以在这里下载棱镜。 Prism

这里有一个步骤,你应该能够在这里剪切并粘贴到你的代码中。 Interception Behaviour您可以在应用程序的启动阶段连接此演练的代码,Unity将处理其余的代码...

准备好一些代码是非常有利的,因为如果您还没有工作,它可能会变得毛茸茸与之前的类型注入,所以我建议演练。

+0

一个类实现了'INotifyPropertyChanged',否则它不会。如果没有实际实现它,类没有办法像“实现”INotifyPropertyChanged一样行为,因为其他库专门用'is''''as来测试那个接口。但是如果我正确地阅读它,动态创建的类真的实现了'INotifyPropertyChanged'。 – hvd

+0

当给定的类已经连线时,其他使用“is”或“as”进行接口测试的类将得到“True”响应。否则,你应该联系Unity团队,让他们知道“没有办法让班级表现得像......”,因为他们说的不是这样。 –

+0

“没有实际执行”。就像我说过的那样,类似于动态创建的类似于它们实现接口的行为,它们实现了接口。 – hvd

相关问题