2014-10-08 54 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);