2012-04-02 3 views
0

내 그리드에 Infragistics XamDataGrid를 사용하고 있습니다. ObservableCollection에 바인딩됩니다."로딩"애니메이션 우선 순위

창에서 드롭 다운을 선택하면 배경 스레드에서 데이터 요청이 이루어지고 로딩 애니메이션이 시작됩니다. 데이터가 수신되면 필요한 작업이 모두 배경 스레드에서 수행됩니다.

내가 직면 한 문제는 일단 모든 데이터가 준비되면 그리드가 바인딩 된 컬렉션을 업데이트해야한다는 것입니다. 이 작업은 UI 스레드에서 수행해야합니다. 따라서 XamDataGrid가 컬렉션 변경을 처리하기 위해 UI 스레드에서 작업을 수행하는 동안 애니메이션이 애니메이션으로 재생되지 않습니다.

내가 알 수있는 한 그리드 로딩과 애니메이션이 동일한 UI 스레드에서 발생해야하므로 할 수있는 일이 많지 않습니다.

내가 놓친 것이 있습니까? 그리드가 새 행을 표시하는 동안 애니메이션을 계속 실행하는 방법은 무엇입니까?

+0

RunWorkerCompleted 이벤트를 처리하는 위치를 표시하십시오. – Paparazzi

답변

1

내가해야 할 첫 번째 일은 성능 비용이 어디에 있는지 파악하는 것입니다. UI를 단순화하고 WPFPerf를 사용해보십시오. 그리드에서 특히 비싼 데이터 템플릿을 찾을 수 있습니다.

여전히 성능상의 문제가 발생하면 업데이트를 소규모 그룹으로 배치하고 각각을 자신의 디스패처 메시지로 실행하십시오. 의사 코드 :

// running on BG thread 
var data = server.GetTheData(); 

// have the data, so marshal back to the UI thread in batches of 5 
foreach (var batch in data.Batch(5)) 
{ 
    dispatcher.Invoke(..., batch); 
}