2011-01-30 5 views
1

코드 우선, CTP5 데이터 컨텍스트가 있습니다. DataGrid에 WPF 앱이 있습니다. Entity Framework - 코드 우선, UI에서 업데이트되지 않는 DbSet.Local

dataGrid.DataContext = _context.Customers.Local; 

그때 내가 그들에 대한 몇 가지 작업을 할

_context.Customers.Add(customer1); and so on 
_context.SaveChanges(); 

그럼, 내가 다른 클래스에 이러한 고객 (고객의 목록)를 제공하여 몇 가지 요소를 추가 : 내가 좋아하는 자사의 DataContext를 설정합니다.

customerUpdater.Update(customers); 

오랜 시간이 걸리며 작업하는 동안 각 고객의 속성을 업데이트합니다. 예 :

foreach(var customer in customers) { customer.Name = "updated name"; } 

내 WPF UI에서 이러한 업데이트가 표시되지 않습니다. 내가 본 모든 것은 변경되지 않은 고객의 원래 목록입니다. Customers.Local은 ObservableCollection이므로 UI에서 업데이트가 표시되지 않는 이유를 알 수 없습니다.

속성 업데이트가 발생할 때마다 SaveChanges()를 호출하고 싶지는 않지만 거의 일정합니다. 누군가 이것이 왜 업데이트되지 않을지 말해 줄 수 있습니까?

답변

3

Customers.Local이 observableCollection이고 항목 중 하나의 "name"속성을 업데이트하면 관찰 가능 컬렉션을 수정하지 않아 업데이트가 표시되지 않고 수정할 수있는 것은 속성 (observableCollection에있는 항목 중 하나 (고객))의 observableCollection은 변경되지 않고 그대로 유지되므로 아무런 알림도 UI에 보내지 않습니다 (항목 수가 동일 함)

UI를 알리려면 고객의 등록 정보 이름을 업데이트 할 때 INotifyPropertyChanged 인터페이스를 구현하도록 고객 클래스를 만들어야합니다.

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

+0

좋아,에서 INotifyPropertyChanged의 상용구 코드를 방지 할 수있는 방법이 없다? 나는 모든 재산에 대해 모든 것을 쓰는 데 시간을 낭비하지 않을 것입니다. ObservableCollection의 요점은 INotifyPropertyChanged를 자동으로 구현하고 속성이 항목 중 하나에서 변경되면 알리는 것을 포함하여 모든 것을 처리한다는 것입니다. – Chad

+1

observableCollection은 모든 유형의 항목을 보유 할 수 있으므로 가능한 각 클래스에 대해 속성이 변경 될 때마다 알림을 던져서는 안되며 (알림을 throw하는 일부 속성을 원하지 않을 수도 있음) 인터페이스를 구현하고 특히 속성이 변경 사항을 알릴 최적의 옵션을 선택하는 것이 좋습니다. –

관련 문제