用户编辑WPF DataGrid Cell时如何知道?

时间:2012-11-20 05:03:52

标签: c# wpf datagrid

我有WPF DataGrid。用户可以在cell中编辑数据。我想要一个event,我想检查cell是否empty。用户可以使用Del Backspace Cut选项等清空数据。

给我一​​个eventevent handler来做这件事。我已尝试OnCellEditEnding event,但只有在编辑完成后才会触发此操作。我希望每次用户cell时动态检查inputs为空。

2 个答案:

答案 0 :(得分:2)

每个datagridcell在处于编辑模式时都有一个文本框作为其内容。每当一个键关闭时(通过处理 onKeyDown onPreviewKeyDown 事件),你可以检查写在该文本框中的文本长度

编辑:

使用PreparingCellForEdit事件,就像这样:

void MainDataGrid_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
   TextBox tb = e.Column.GetCellContent(e.Row) as TextBox;
   tb.TextChanged+=new TextChangedEventHandler(tb_TextChanged); 
}

void tb_TextChanged(object sender, TextChangedEventArgs e)
{
   //here, something changed the cell's text. you can do what is neccesary
}

答案 1 :(得分:2)

使用data binding

    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="First Name" Binding="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}"/>
            <DataGridTextColumn Header="Last Name" Binding="{Binding LastName, UpdateSourceTrigger=PropertyChanged}"/>
        </DataGrid.Columns>
    </DataGrid>

其中items source是一系列对象,如下所示:

public class Customer : INotifyPropertyChanged
{
    public string FirstName
    {
        get { return firstName; }
        set
        {
            if (string.IsNullOrEmpty(value))
            {
                // oops!
            }

            if (firstName != value)
            {
                firstName = value;
                OnPropertyChanged("FirstName"); // raises INotifyPropertyChanged.PropertyChanged
            }
        }
    }
    private string firstName;

    public string LastName { /* ... */}
}