Wpf EF 6和ObservableCollection之间的奇怪行为
我在EF 6和我的WPF ViewModel之间有一个行为,我不理解: 我的ViewModel有一个可观察的收集协议。在ViewModel的构造函数中,我调用Wpf EF 6和ObservableCollection之间的奇怪行为,wpf,entity-framework,mvvm,Wpf,Entity Framework,Mvvm,我在EF 6和我的WPF ViewModel之间有一个行为,我不理解: 我的ViewModel有一个可观察的收集协议。在ViewModel的构造函数中,我调用 Protocols = new ObservableCollection<ProtocolType>(dal.GetAllProtocols()); Protocols=newobserveCollection(dal.GetAllProtocols()); dal是来自DataAccessLayer的ProtoColTy
Protocols = new ObservableCollection<ProtocolType>(dal.GetAllProtocols());
Protocols=newobserveCollection(dal.GetAllProtocols());
dal是来自DataAccessLayer的ProtoColTypeRepository
我在视图中有一个DataGrid,它绑定到协议。如果DataGrid添加了一个新项(CanUserAddRows=true),ProtoColTypeRepository会注意到,因此我不需要调用dal.Insert()。更新也会被注意到
如果通过按DEL键从DataGrid中删除一项,则
ProtoColTypeRepository没有注意到它。此时,我必须自己调用dal.Delete()
如何以及为什么会注意到ProtoColTypeRepository自动插入和更新
我希望我必须手动调用dal.Insert()和dal.Update(),因为ObservableCollection用于视图,ProtoColTypeRepository用于DataAccess
如果我从MainViewModel调用另一个窗口(比如LanguageViewModel),则会发生另一件奇怪的事情。我有相同的构造函数调用:
Languages = new ObservableCollection<ProtocolType>(dal.GetAllLanguages());
Languages=newobserveCollection(dal.GetAllLanguages());
视图中还有一个绑定到语言的数据网格。但在这种情况下,我必须通过调用dal.Insert()、dal.Update()等手动同步数据访问
我真的想知道为什么我没有我写得更进一步的行为,因为它的工作原理是一样的
我使用VS2010
我希望你能给我解释这件事
提前感谢为什么dal应该知道您的可观察到的收集已更改?嘿,WiiMaxx,这是我的问题。。。如果我在DataGrid(视图)上添加一个项并调用dal.SaveChanges()。添加的项目在我的数据库中。因此,出于某种原因,当ObservableCollection添加新项时,我的dal会注意到……我将开始比较手动调用Insert和不调用Insert的两个类?@GrayFox您的dal会在数据库发生更改时得到通知,而不是在您将项添加到您的
ObservableCollection
时,因为如果您只向集合中添加一个项目,dal中不会发生任何事情,但是如果您在DB中手动添加一个项目,dal将以某种方式收到通知