框TextChanged /引发LostFocus /等。 DataGridTextColumn的事件

时间:2010-01-19 15:34:04

标签: c# wpf xaml datagrid wpfdatagrid

我有一个绑定到WPF页面中DataGrid的对象列表,如果在特定列中输入的值小于某个数字,我希望在当前的对象之后直接添加一个对象。 / p>

<my:DataGridTextColumn Binding="{Binding Path=Hours}"/>

我不能为我的生活找出如何绑定到基础TextBox上的事件。各种站点引用了执行此操作的能力,但没有提供相关代码。目前我一直在使用DataGridTemplateColumn内部TextBox,但我似乎无法使用该解决方案获取当前行。

2 个答案:

答案 0 :(得分:4)

为实现这一目标,我在数据网格本身上使用了CellEditEnding事件。

this.TheGrid.CellEditEnding += new EventHandler<DataGridCellEditEndingEventArgs>(TheGrid_CellEditEnding);

在该方法中,您可以使用Dispatcher来延迟对方法的调用,以便将值存储回绑定对象中。

private void TheGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    Dispatcher.BeginInvoke(new Action(this.CellEdited));
}

您还可以将DataGridCellEditEndingEventArgs传递给方法,以便检查与基础TextBox一起编辑的单元格的行和列。

此外,由于数据网格关注对象,因此行索引不太相关,因此不易获取(我可以找到)。

答案 1 :(得分:1)

您可以将此代码用于更新的所有单元格和行:

<sdk:DataGrid ItemsSource="{Binding Collection}" CellEditEnded="DataGrid_CellEditEnded" RowEditEnded="DataGrid_RowEditEnded">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn Binding="{Binding Path=Hours}" Width="Auto" />
    </sdk:DataGrid.Columns>
</sdk:DataGrid>