我已经尝试了一段时间将我的想法同时包含在2个概念中,学习MVVM(其中一个难点就是试图找出使用哪个框架。我们甚至不知道有多少个直到几个星期前)我还试图学习实体框架4.2。
这是我们要编写的WPF应用程序。
我收到了Julia Lerman的书,我也正在参加一个关于EF的在线培训课程,但有一点我还没有得到,还没有看到任何一个例子,就是如何处理通过EF创建的类的INotifyPropertyChanged接口,无论我们是否使用MVVM,使用INotifyPropertyChanged都至关重要。
所以,让我在这里问一个简单的问题:
您是否允许EF创建反映数据库中所有数据的所有数据访问类,然后复制大部分代码,以便我可以使用INotifyPropertyChanged?或者还有其他方法吗?
答案 0 :(得分:1)
当我想到这个想法时,我感到很困惑,我必须将每个数据对象映射到一个新的数据对象,只在它上面实现INPC。
然后我发现了一个技巧:假设您要使用WCF,它会自动实现INPC。
对于集合,只需进入服务引用配置,并进行设置,以便它将ObservableCollection作为默认集合类型。
就是这样,你被设置为MVVM =)
答案 1 :(得分:0)
由于ViewModel
是根据View
的需求创建的,因此只有在非常简单的情况下,ViewModel
和您的Entity
才是同一个类。通常你有Entity
班和ViewModel
班
INotifyPropertyChanged
只是其中一个原因。还有其他如转换,验证,有意义的错误消息,聚合等。
答案 2 :(得分:0)
我以前在几个WPF应用程序中使用过Entity Framework。我第一次使用EF数据库。完全按照我想要的方式获取模型非常棘手,一旦它工作,我就必须在我的实体类上实现INotifyPropertyChanged。
最近,我已经开始使用4.1的EntityFramework CodeFirst,我发现处理所有属性更改的东西要容易得多。我通常创建一个在其上实现INotifyPropertyChanged的基类,并从中继承我的实体。
就ViewModel而言,我也开始担心这个框架或那个框架。后来我决定自己动手。当然,框架有一些有趣的功能,但是对于学习,我发现通过创建我自己的ViewModelBase类并从中继承我的所有ViewModel更容易进入它。
ViewModelBase通常实现INotifyPropertyChanged。后来我创建了一个ViewModel监视器类,它将包含一组ViewModel。为了查找它们,我为ViewModelBase提供了一个FriendlyName属性,以便每种类型的继承ViewModel都可以为它设置一个名称(我的类型通常是RecordMaintenanceViewModel,NavigationViewModel,ShellViewModel等),我通常会继承我使用过的特定于视图的ViewModel那些。因此,在我的发货程序中的ShipmentView上,ShipmentViewModel继承自CollectionViewModel,后者继承自ViewModelBase。通过这种方式,我将功能划分为谨慎的部分,使我能够处理特定的场景。
我通常将我的ViewModel基础移植到每个项目,并经常使用我的中间ViewModel;有时候我不得不重新创造它们。