Wpf EF 6和ObservableCollection之间的奇怪行为

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

我在EF 6和我的WPF ViewModel之间有一个行为,我不理解:

我的ViewModel有一个可观察的收集协议。在ViewModel的构造函数中,我调用

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将以某种方式收到通知