2012-03-28 1 views
0

같은 EntitySet에서 항목을 검색하는 페이지가 여러 개 있다는 것을 말하십시오. 내가 한 페이지에 새 개체를 추가하는 경우, 둘 다 EntitySet 수집 및 myCollection에 추가해야합니다EF : 컬렉션에 새 항목 추가 및 다른 모든 컬렉션에 새로운 항목 추가 알림

Context.EntitySet.Add(item); 
myCollection.Add(item); 

새로운 항목이 추가 (또는 삭제)되는 다른 페이지를 통지하는 가장 좋은 방법은 무엇입니까? 엔티티 편집은 아무 문제없이 모든 페이지가 변경 알림을 받기 때문에 아무런 문제가되지 않습니다.

+0

'myCollection'의 다른 인스턴스 대신'Context.EntitySet'을 사용할 수 있습니까? 엔터티를 저장할 병렬 컬렉션을 만드는 이유는 무엇입니까? –

+0

당신은 EntitySet에 직접 바인딩하는 아이디어로 suprises를 얻었습니다. 내가 읽은 모든 자료에서 이것은 결코 제안 된 옵션이 아니 었습니다. 어쨌든 IEnumerable 을 사용하여 제안한 작업을 수행 할 수도 있습니다. 각 VM에서 동일한 인스턴스를 참조하기 만하면됩니다. 문제 : 동일한 컬렉션을 항상 쿼리하는 경우 데이터 저장소에서 새로운 데이터를 얻는 방법은 무엇입니까? – Goran

답변

0

IEnumerable<T> myCollection의 다른 인스턴스에 바인딩하는 대신 권장 방법은 Context.EntitySet<T>에 직접 바인딩하는 것입니다. EntitySet<T>INotifyCollectionChangedINotifyPropertyChanged 인터페이스를 구현합니다. 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>을 직접 사용했을 때 나타납니다.

+0

다른 컬렉션 형식 (예 : ObservableCollection )을 생성하는 데 사용할 수 있으므로 IEnumerable 의 예제를 제공했습니다. 아직도, 당신의 방법은 나에게 명확하지 않습니다. 필자가 항상 같은 소스 (EntitySet )에 바인딩하면 데이터가 데이터베이스에서 한 번만 검색된다는 것을 의미합니다. 네트워크상의 다른 사용자가 수정 한 새로운 데이터를 언제 어떻게 쿼리합니까? – Goran