TextChanged / LostFocus / и т.д..событие для DataGridTextColumn - PullRequest
3 голосов
/ 19 января 2010

У меня есть список объектов, связанных с DataGrid на странице WPF, и я хочу добавить объект сразу после текущего, если значение, введенное в определенном столбце, меньше определенного числа.

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

Я не могу на всю жизнь понять, как связать событие с базовым TextBox. Различные сайты ссылаются на возможность сделать это, но ни один не предоставляет соответствующий код. На данный момент я использую DataGridTemplateColumn с TextBox внутри него, но я не в состоянии получить текущую строку с этим решением.

Ответы [ 2 ]

4 голосов
/ 21 января 2010

Для этого я использовал событие 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 голос
/ 28 марта 2012

Вы можете использовать этот код для всех обновленных ячеек и строк:

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