2010-07-28 9 views
0

좋은 옛날 (잘 !!) WinForms 날에 실제 컨트롤에 사용되는 DataGrids 행이 있으므로 DataItem에 액세스 할 수있었습니다.WPF DataGrid의 컨트롤에 액세스하는 방법

WPF에서 모든 뒤집기 및 dataGrid.Items는 소스 데이터입니다.

나는 아마도 WPF newb로 약간 잘못 돌아가고 있지만, 어떻게하면 특정 레이블, 텍스트 박스 등의 값을 잡아 내 gridview의 행을 반복 할 수 있습니까?

답변

0

예, 잘못하고 있습니다. 당신이해야 할 일은 데이터 소스의 아이템들을 반복하는 것입니다. 그것은 결국 모든 값들이있는 곳입니다.

WPF 객체를 반복 할 수는 있지만 사소하지는 않습니다. 그리고 시도하면 중대한 문제가 발생할 수 있습니다.

VisualTreeHelper 클래스를 사용하여 시각적 트리를 검색하고 DataGrid의 자손 개체를 찾을 수 있습니다. 이것으로 충분히 오래 플레이한다면 결국 원하는 컨트롤을 찾는 방법을 알아낼 것입니다. 그러나 DataGrid (실제로 제어 템플릿의 VirtualizingStackPanel)은 시각적 인 하위 항목을 가상화합니다. 항목이 아직 화면에 나타나지 않은 경우 해당 항목이 아직 작성되지 않았으므로 시각적 트리에서 항목을 찾을 수 없습니다. 찾고있는 것을 찾을 수 없을 수도 있습니다. 찾을 방법이 없기 때문이 아니라 존재하지 않기 때문입니다.

바인딩에서 값 변환기와 서식을 사용하는 경우 (이는 내가 WPF 개체와 기본 데이터 항목이 아니라고 생각할 수있는 유일한 이유입니다), 나는 두려워합니다. 대답은 :하지 마. 데이터 원본에서 값 변환 및 서식 지정을 수행하고 결과를 직접 바인딩 할 수있는 속성으로 표시합니다.

MVVM 패턴을 사용하지 않고 WPF를 사용할 수 있습니다. 그러나 이것은 당신이하지 않으면 당신이 갈 수있는 벽돌 벽의 종류입니다.

0

는이

public DataGridRow TryFindRow(object item, DataGrid grid) 
    { 
     // Does not de-virtualize cells 
     DataGridRow row = (DataGridRow)(grid as ItemsControl).ItemContainerGenerator.ContainerFromItem(item); 

     return row; 
    } 

경우 항목이 행에 표시되는 데이터를 나타낼 수 있습니다. 희망이 도움이됩니다.

관련 문제