2014-10-08 69 views
0

我有一个WPF的Datagrid,用一个DataTemplate列组合框获取从数据模板组合框在WPF的DataGrid

<DataGrid Name="grdTest" ItemsSource="{Binding Path=TestsList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
<DataGrid.Columns> 
    <DataGridTemplateColumn Width="120"> 
     <DataGridTemplateColumn.Header > 
      <TextBlock Text="Test Name" ToolTip="Test Name" Width="109"/> 
     </DataGridTemplateColumn.Header> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ComboBox Name="cbxTest" 
     SelectedValue="{Binding TestID,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
     DisplayMemberPath="Test" SelectedValuePath="TestID" SelectionChanged="cbxTest_SelectionChanged_1" 
     ItemsSource ="{Binding Path=TestList}"> 
       </ComboBox> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
</DataGrid.Columns> 
</DataGrid> 

我试图让下面的DataGrid的CellEditEnding事件的组合框元素:

FrameworkElement elmtTest = grdTest.Columns[7].GetCellContent(e.Row); 
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(elmtTest); 
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate; 
ComboBox myComboBox = (ComboBox)myDataTemplate.FindName("cbxTest", myContentPresenter); 

elmtTest的类型为System.Windows.Controls.ContentPresenter。 但内容模板为空。我如何获得datagrid列的组合框元素?

回答

1

我得到它的工作。从我的结局来看,这是一个愚蠢的错误。我必须将组合框传递给FindVisualChild。

FrameworkElement elmtTest = grdTest.Columns[7].GetCellContent(e.Row); 
ComboBox myComboBox = FindVisualChild<ComboBox>(elmtTest);