DataGrid:帮助访问CellEditingTemplate中定义的控件

时间:2009-04-10 22:37:21

标签: wpf datagrid binding datatemplate

我正在使用带有DataGridTemplateColumn的WPF DataGrid。 DataGridTemplateColumn.CellEditingTemplate包含一个将IsEditable设置为“true”的ComboBox。在我的RowEditEnding事件处理程序中,我想读取该ComboBox的Text属性 - 唯一的问题是我不知道如何在事件处理程序中检索ComboBox实例以获取Text属性。

供参考,这是我的DataTemplate:

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

我的代码:

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

我知道我可以使用e.Row到达当前受影响的行...也许解决方案涉及使用e.Row的东西? 我已经尝试从e.Row递归地走向可视树,寻找ComboBox的一个实例,但没有骰子。我几乎肯定解决方案很简单,但是,我总体而言是WPF的新手。 任何建议都会非常感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用此代码

直接从DataGrid获取de Combobox Column
var cbx = (DataGridComboBoxColumn)productsDataGrid.Columns.First(a => a.Header.ToString() == "name of your column");

答案 1 :(得分:1)

似乎只能在DataGrid中的PreparingCellForEdit事件期间访问CellEditingTemplate。您可以在DataGrid上为该事件连接一个处理程序,并在处理程序上执行类似的操作以访问您的ComboBox

private void _CounterGoalsGrid_PreparingCellForEdit(object sender, 
    DataGridPreparingCellForEditEventArgs e) 
    {
        ComboBox editCombo = (e.EditingElement.FindName("<your combobox name>") as ComboBox);
    }
  • 请记住在xaml中命名您的ComboBox。