唯一的例外是我們有幾個頁面可以從同一個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