我正在使用带有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的新手。 任何建议都会非常感激。
谢谢!
答案 0 :(得分:1)
您可以使用此代码
直接从DataGrid获取de Combobox Columnvar 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);
}