EF如何在WPF/Silverlight应用程序中工作?

EF如何在WPF/Silverlight应用程序中工作?,wpf,entity-framework-4.1,inotifypropertychanged,Wpf,Entity Framework 4.1,Inotifypropertychanged,一段时间以来,我一直试图同时围绕两个概念进行思考,学习MVVM(其中一件困难的事情是试图找出要使用哪种框架。直到几周前,我们甚至不知道有多少框架),同时我还试图学习Entity framework 4.2 这是我们将要编写的WPF应用程序 我已经拿到了Julia Lerman的书,我也正在参加一个关于EF的在线培训课程,但有一件事我仍然没有得到,也没有看到任何例子,那就是如何处理类似INotifyPropertyChanged接口的东西,以及通过EF创建的类,不管我们是否使用MVVM,使用INo

一段时间以来,我一直试图同时围绕两个概念进行思考,学习MVVM(其中一件困难的事情是试图找出要使用哪种框架。直到几周前,我们甚至不知道有多少框架),同时我还试图学习Entity framework 4.2

这是我们将要编写的WPF应用程序

我已经拿到了Julia Lerman的书,我也正在参加一个关于EF的在线培训课程,但有一件事我仍然没有得到,也没有看到任何例子,那就是如何处理类似INotifyPropertyChanged接口的东西,以及通过EF创建的类,不管我们是否使用MVVM,使用INotifyPropertyChanged非常重要

所以,让我在这里问一个简单的问题:


您是否允许EF创建反映数据库中所有数据的所有数据访问类,然后复制大部分代码,以便我可以让它使用INotifyPropertyChanged?或者还有其他方法吗?

因为创建
视图模型时考虑了
视图的需要,只有在非常简单的情况下
视图模型
和您的
实体
是同一类。通常您有一个
实体
类和一个
视图模型
类。

INotifyPropertyChanged
只是其中一个原因。还有转换、验证、有意义的错误消息、聚合等。我以前在几个WPF应用程序中使用过Entity Framework。我第一次使用EF数据库的时候。按照我想要的方式获取模型是相当棘手的,一旦它工作起来,我就必须在实体类上完成并实现INotifyPropertyChanged

最近,我开始使用EntityFramework CodeFirst和4.1,我发现处理所有属性更改的内容要容易得多。我通常创建一个基类,并在其上实现INotifyPropertyChanged,然后从中继承实体

至于ViewModel,我也开始担心这个框架或那个框架。后来我决定自己滚。当然,这些框架有一些有趣的功能,但是为了学习,我发现通过创建自己的ViewModelBase类并从中继承所有ViewModels,可以更轻松地使用它

ViewModelBase通常实现INotifyPropertyChanged。后来,我创建了一个ViewModel监视器类,该类将包含一组ViewModels。为了查找它们,我给了ViewModelBase一个FriendlyName属性,这样每种继承的ViewModel类型都可以为其设置一个名称(我的类型通常是RecordMaintenanceViewModel、NavigationViewModel、ShellViewModel等),我通常会从这些类型继承我使用的视图特定的ViewModel。因此,在我的shipping程序中的ShipmentView上,ShipmentViewModel继承自CollectionViewModel,后者继承自ViewModelBase。通过这种方式,我将功能划分为几个独立的部分,允许我处理特定的场景


我通常将我的ViewModel库移植到每个项目中,并经常使用我的中间ViewModels;有时我不得不重新创建它们。

当我想到必须将每个数据对象映射到一个新的对象时,我感到困惑,因为它只能在上面实现INPC

然后我发现了一个技巧:假设您要使用WCF,它会自动实现INPC
对于集合,只需进入服务引用配置,并将其设置为将ObservableCollection作为默认集合类型


就这样,您设置了MVVM=)

什么?WCF实现INotifyPropertyChanged接口?你在开玩笑吧?我不知道。这取决于您返回的数据类型吗?例如,几年前(我想是2008年或更早),我写了我所有的WCF服务,那时我当然不知道INPC。我的所有WCF类都返回强类型数据集。我假设这些都没有实现INPC,我说的对吗?去检查你的客户机中的类型。当你看到每个人身上的“PropertyChanged”事件时,请睁大眼睛=P