2009-04-10 6 views
2

DataGridTemplateColumn과 함께 WPF DataGrid를 사용하고 있습니다. DataGridTemplateColumn.CellEditingTemplate에는 IsEditable이 'true'로 설정된 ComboBox가 포함되어 있습니다. 내 RowEditEnding 이벤트 처리기에서 해당 ComboBox의 Text 속성을 읽으려고합니다. 유일한 문제는 Text 속성을 가져 오기 위해 이벤트 처리기 내에서 ComboBox 인스턴스를 검색하는 방법을 모르는 것입니다.DataGrid : CellEditingTemplate에 정의 된 컨트롤에 액세스하는 방법

<!-- ... --> 
    <my:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox IsEditable="True" ItemsSource="{Binding Source={StaticResource ProductCategories}}" SelectedItem="{Binding Path=Name}" DisplayMemberPath="Name" /> 
     </DataTemplate> 
    </my:DataGridTemplateColumn.CellEditingTemplate> 
    <!-- ... --> 

그리고 내 코드 : 내가 e.Row를 사용하여 현재 영향을받는 행을 얻을 수 있다는 사실을 알고

private void productsDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
    { 
     // UH-OH! Where do I find the ComboBox instance? 
    } 

... 아마 솔루션 참고로

, 여기 내 DataTemplate을의 e.Row를 사용하여 무언가를 포함합니까? 나는 ComboBox의 인스턴스를 찾기 위해 e.Row에서 시각적 트리를 반복적으로 보았지만 주사위는 사용하지 않았다. 솔루션이 간단하다는 점은 거의 긍정적입니다. 그러나 저는 WPF에 대해 일반적으로 새로운 것을 알았습니다. 제안 사항을 보내 주시면 감사하겠습니다.

감사합니다.

+0

해결책을 찾았습니까? – Shimmy

답변

1

는이 코드

var cbx = (DataGridComboBoxColumn)productsDataGrid.Columns.First(a => a.Header.ToString() == "name of your column"); 
+0

그래서 CellEditingTemplate에 어떻게 가야합니까? OP는 DataGridComboBoxColumn이 아니라 DataGridTemplateColumn에 대해 이야기하고있었습니다. – Shimmy

1

그것은 CellEditingTemplate에 대한 액세스를 보이는 데이터 그리드에서 PreparingCellForEdit 이벤트 기간 동안 만 사용할 수를 사용하여 데이터 그리드에서 직접 드 콤보 상자 열을 얻을 수 있습니다. 당신은 데이터 그리드에서 해당 이벤트에 대한 투수를 배선하고 콤보

private void _CounterGoalsGrid_PreparingCellForEdit(object sender, 
    DataGridPreparingCellForEditEventArgs e) 
    { 
     ComboBox editCombo = (e.EditingElement.FindName("<your combobox name>") as ComboBox); 
    } 
  • XAML에서 콤보 상자의 이름을 기억에 도착하는 핸들러에 같은 것을 할 수 있습니다.
관련 문제