2012-01-29 3 views
0

DataTable의 값으로 채워지는 Datagrid가 있습니다. 내 프로그램에서 네 개의 단추가 있습니다 : 첫 번째, 마지막, 다음 및 이전으로 이동, 이름 이름으로 이러한 단추를 사용하여 만든 선택을 기반으로 행을 선택해야 함을 나타냅니다. 다음 코드를 사용하여 행 (예 : 첫 번째 행)을 얻으면 모든 것이 잘된 것처럼 보입니다.Datagrid 행 선택 단추 클릭 WPF 있음

DataGridRow row =(DataGridRow)userControl.m_DataGrid.ItemContainerGenerator.ContainerFromIndex(0); 
row.IsSelected = true; 

그러나 데이터 그 리드 높이보다 많은 행이있는 경우 (스크롤바가 그림으로 표시 될 때) 코드가 null 값을 던집니다.

이 문제를 도와주세요. 나는 이것이보기 문제 때문에라고 생각한다.

답변

0

가상화로 인해 컨테이너는 오브젝트가 표시 될 때만 작성되므로 respective method을 사용하여 항목을보기로 스크롤하고 컨테이너 생성을 기다린 다음 선택할 수 있습니다.

이것은 다소 번거롭기 때문에 (ItemContainerStyle으로 설정) 스타일을 사용하여 아이템의 속성에 IsSelected을 바인딩하는 것이 좋습니다. 그런 다음 속성을 true로 설정하고 필요한 경우보기로 항목을 스크롤 할 수 있습니다.

+0

첫 번째 방법 (ScrollIntoView)을 시도 했으므로 첫 번째 및 마지막 위치로 이동할 수 있지만 null 값을 제공하므로 행 선택이 여전히 불가능합니다. 첫 번째 행에 대해서만 좋은 방식으로 작동합니다. ** CustomerGrid.ScrollIntoView (CustomerGrid.Items [0]); DataGridRow row = (DataGridRow) CustomerGrid.ItemContainerGenerator.ContainerFromIndex (0); row.IsSelected = true; row.Focus(); ** – Kris

+0

@Kris : 컨테이너를 만들 때까지 기다려야한다고했습니다. ** 같은 방법으로는이 작업을 수행 할 수 없습니다. 그리드는 그 시점에서 스크롤하지 않았을 것입니다. 유휴 상태 일 때 UI 스레드가 수행합니다. 나는 이것을하려고하지 않을 것이다, 그것은 왕의 고통이다. –