2012-03-19 4 views
0

DispatcherTimer()를 사용하여 데이터가 다른 위치에서 업데이트되는 데이터베이스에서 listview를 업데이트하는 업데이트 함수를 호출하고 있습니다. 따라서 listview는 대시 보드처럼 사용됩니다.WP 테이블 뷰를 db 테이블 업데이트로 업데이트하십시오.

private void Update(){ 
     DateTime d = DateTime.Today; 
     items = (from i in DataManager.Entities.signals 
           where i.Date > d 
           orderby i.Id descending 
           select i).Take(MAX_NUM_OF_DISPLAYED); 

     this.lvDashboard.ItemsSource = items;   
    } 

특정 양의 데이터가 도달 할 때까지 정상적으로 작동합니다. 데이터베이스에서 마지막으로 업데이트 된 데이터를 쿼리하여 itemssource에 추가 할 수 있다는 것을 알고 있습니다. 내 코드를 간단하고 명확하게하려고 노력 중입니다. 아이디어 나 제안을 주시겠습니까? 그것은 1000 데이터의 행과 데이터 창은 최근의 데이터로 이동 유지와마다 1 ~ 2 초가 업데이트

---------------- 갱신 --- . 프로세스 메모리가 계속 증가하는 몇 가지 이유가 있습니다. DataTable은 DB updaates를 모니터링합니까 ?? DB가 다른 곳에서 업데이트되면 DB가 DataTable 자체를 업데이트합니까?

+0

정확하게 실패 할 경우 (매우 자주 목록보기를 업데이트합니까) ??? – MrClan

+0

간단하고 명확한 것은 종종 빠른 것과 함께 잘 작동하지 않습니다.) 그러나 모든 사람들이 이미 제안했듯이. ItemsSource 재설정은 가능하면 최악입니다. 데이터 바인딩의 힘을 사용하고, ObservableCollection을 ItemsSource로 사용하고, 데이터를 목록에 추가하고, 나머지를 wpf로 처리하게하십시오. – dowhilefor

답변

0

더 많은 작업이 이루어 지지만 데이터의 하위 집합 만 변경되면 항목이 ObservableCollection으로 설정되고 항목이 추가 및 제거됩니다. 그리고 다시 바인딩하지 마십시오. 당신이 DataView에 결합하는 경우

0

DataTable에서 수행 Commit (데이터베이스 테이블에 DataTable 가리키는 기본)은 자동으로 DataView를 새로 것이며 GUI가 표시됩니다. 그러나 코드 이외의 다른 것이 있으면 테이블을 업데이트하고 GUI에서 업데이트 된 것을 볼 필요가 있습니다.이를 위해 일부 게시자 - 구독자 모델을 고려할 수 있습니다.

관련 문제