我有WPF
DataGrid
。用户可以在cell
中编辑数据。我想要一个event
,我想检查cell
是否empty
。用户可以使用Del
Backspace
Cut
选项等清空数据。
给我一个event
和event handler
来做这件事。我已尝试OnCellEditEnding
event
,但只有在编辑完成后才会触发此操作。我希望每次用户cell
时动态检查inputs
为空。
答案 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 { /* ... */}
}