WPF数据网格行编辑开始事件以添加新行
本文关键字:事件 添加 新行 开始 编辑 数据 数据网 网格 WPF | 更新日期: 2023-09-27 18:17:38
我有一个3列的数据网格,它绑定到一个具有3个属性的类的集合。我想在开始编辑一行时添加新行。目前WPF的默认行为是:键入整行,然后单击enter或失去焦点以添加新行。我想在当前行编辑开始时添加行。
似乎没有任何行编辑开始事件。我可以锁定并以编程方式添加空Person,即新行。
有没有一种不那么俗气和优雅的方法来做这件事呢?
<DataGrid ItemsSource="{Binding Team}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Number" Binding="{Binding Number}" />
<DataGridTextColumn Header="Gender" Binding="{Binding Gender}"/>
</DataGrid.Columns>
</DataGrid>
VIEW MODEL:
public class WindowViewModel2:INotifyPropertyChanged
{
private ObservableCollection<Person> team;
public ObservableCollection<Person> Team
{
get { return team; }
set
{
team = value;
OnPropertyChanged();
}
}
public WindowViewModel2()
{
team=new ObservableCollection<Person>();
Team.Add(new Person(){Name="P" ,Gender="M",Number="123"});
}
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
类:公共类Person:INotifyPropertyChanged{
public string Name { get; set; }
public string Number { get; set; }
public string Gender { get; set; }
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
你可以使用。net 4.5中添加到DataGrid的AddingNewItem事件,它会在新项目被添加到DataGrid之前发生。
如果。net 4.5不是一个选项,我会关闭CanUserAddRows,然后创建一个按钮,直接添加一个新项目到你的集合绑定ItemsSource,在这个按钮中你可以做任何初始化或计算,然后用户可以编辑DataGrid中的其余部分。这是我经常用于删除的技术,而不是使用内置的CanUserDeleteRows。