代码之家  ›  专栏  ›  技术社区  ›  Jake Wharton

text DataGridTextColumn的Changed/LostFocus/etc.事件

  •  3
  • Jake Wharton  · 技术社区  · 14 年前

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

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

    在我的一生中,我不知道如何绑定到底层的事件 TextBox . 不同的站点引用了这样做的能力,但没有提供相关的代码。目前我一直在使用 DataGridTemplateColumn 用一个 文本框 在它里面,但是我似乎不能用那个解决方案得到当前的行。

    2 回复  |  直到 12 年前
        1
  •  4
  •   Jake Wharton    14 年前

    为了达到这个目的,我使用了 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 .

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

        2
  •  1
  •   Ali Rasouli    12 年前

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

    <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>