2

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

作为参考,这是我的数据模板:

  <!-- ... -->
  <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 比较陌生。任何建议将不胜感激。

谢谢!

4

2 回答 2

1

您可以使用此代码直接从 DataGrid 中获取 de Combobox Column

var cbx = (DataGridComboBoxColumn)productsDataGrid.Columns.First(a => a.Header.ToString() == "name of your column");
于 2009-11-11T10:30:12.617 回答
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。
于 2010-08-17T01:48:44.720 回答