2013-02-07 2 views
0

내 시나리오는 다음과 같습니다.ICollectionView에서 INotifyPropertyChanged 이벤트를 사용하는 방법?

저는 EF4를 사용하고 있으며 linq을 사용하고 있습니다. 아래 (I 필터링을 사용 bacause) I는 ICollectionView에 바인딩되는 데이터 그리드를 가지고 lstOrdsRlsd는 ObservableCollection에 인

view = CollectionViewSource.GetDefaultView(lstOrdsRlsd); 
       if (lstOrdsRlsd.Count > 0) 
       { 
        dgRecords1.ItemsSource = view; 
       } 

.

내 문제는 다음과 같습니다 뭔가가 데이터베이스에 변경 될 때 (그것의 새 행을 추가하거나 하나 개의 레코드 등의 일부 속성을 변경 여부) 나는 데이터 그리드를 새로 고침 할 필요가

.

datagrid.Items.Refresh() 나는 didnt 일을 시도했다. 이 경우 INotifyPropertyChanged를 사용할 수 있습니까? 누군가 구현할 수있는 샘플 코드를 제공 할 수 있습니까?

감사합니다.

답변

0

DbSet <> .Local 속성을 사용해 볼 수 있습니다. 이것은 데이터베이스 컨텍스트에서 조회 한 모든 행을 가진 관찰 가능한 콜렉션입니다. 나중에 어떤 쿼리를 수행하고 더 많은 행이 돌아 오면

public ObservableCollection<T> DbSet<T>.Local 

는 그래서, DbSet <은> .local의 수집은 당신을 위해 INotifyCollectionChanged 것입니다. :)

그래서 다음 단계는 EF가 새 행을 가져 오는 지 확인하는 것입니다. Daniel Hilgarth의 답변을 통해 구현할 수 있습니다.

0

데이터베이스의 새 행이 응용 프로그램에 자동으로 반영되지 않습니다. 데이터베이스에서 수동으로 새 항목을 요청하여 컬렉션에 추가해야합니다.

+0

안녕 다니엘, 답변 해 주셔서 감사합니다. 타이머를 사용하고 데이터베이스를 다시 쿼리하는 것이 좋습니다. – sony

+0

잘 모르겠습니다. 총계는 비즈니스 요구 사항에 따라 다릅니다. –

+0

SQL 서버 (익스프레스가 아닌)를 사용한다면'SqlDependency' /'SqlChangeMonitor'를 사용하는 것이 좋습니다. – paul

관련 문제