唯一的例外是我们有几个页面可以从同一个EntitySet中检索项目。如果我在一个页面上添加一个新的实体,我需要将其添加到这两个EntitySet的收集和MyCollection的:EF:在集合中添加新项目并通知所有其他集合添加了新项目
Context.EntitySet.Add(item);
myCollection.Add(item);
什么是通知新的项目被添加(或删除)其他页面的最佳方式?编辑实体没有问题,因为所有页面都可以毫无问题地获得更改通知。
唯一的例外是我们有几个页面可以从同一个EntitySet中检索项目。如果我在一个页面上添加一个新的实体,我需要将其添加到这两个EntitySet的收集和MyCollection的:EF:在集合中添加新项目并通知所有其他集合添加了新项目
Context.EntitySet.Add(item);
myCollection.Add(item);
什么是通知新的项目被添加(或删除)其他页面的最佳方式?编辑实体没有问题,因为所有页面都可以毫无问题地获得更改通知。
而不是绑定到IEnumerable<T> myCollection
的不同实例,推荐的方法是直接绑定到Context.EntitySet<T>
。 EntitySet<T>
实现INotifyCollectionChanged
和INotifyPropertyChanged
接口。当绑定到EntitySet<T>
的同一个实例时,可以通过响应EntitySet<T>.CollectionChanged
事件来向每个页面通知更改。例如:
// Page 1
_myCollection = Context.EntitySet<MyItem>();
_myCollection.CollectionChanged += MyItemsChanged;
...
// Page 2
_myCollection = Context.EntitySet<MyItem>();
_myCollection.CollectionChanged += MyItemsChanged;
当任何页面添加或从集合中删除时,通知所有页面。
关于您的评论,IEnumerable<T>
未实现INotifyCollectionChanged
接口,并且不发布任何更改通知。最好的结果来自直接使用EntitySet<T>
。
我刚刚举了一个IEnumerable
你能够使用'Context.EntitySet'而不是'myCollection'的不同实例吗?为什么要创建一个平行集合来存储实体? – 2012-03-28 22:51:21
你让我惊讶的想法直接绑定到EntitySet,在所有的材料,我读过/看过这是从来没有建议的选项。无论如何,我也可以使用IEnumerable来做你的建议,我只需要从每个虚拟机引用相同的实例。问题:如果我总是查询相同的集合,我将如何从数据存储中获取新数据? –
Goran
2012-03-29 21:21:40