我有一个包含3列的数据网格,它绑定到具有3个属性的类的集合。 我想在开始编辑行时添加新行。现在默认的WPF行为是:键入整行,然后单击输入或失去焦点以添加新行。我想在当前行编辑BEGINS时添加行。
似乎没有任何Row编辑开始事件。我可以锁定并以编程方式添加空人,即新行。
这样做是否有一个不那么hacky和优雅的wya?
<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>
查看模特:
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;
}
类: public class 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;
}
答案 0 :(得分:0)
您可以将.NET 4.5中添加的AddingNewItem事件用于DataGrid,这是在将新项添加到DataGrid之前发生的。
如果.NET 4.5不是一个选项,我会关闭CanUserAddRows,然后创建一个按钮,直接向绑定到ItemsSource的集合中添加一个新项目,在该按钮中,您可以进行任何所需的初始化或计算,然后用户可以在DataGrid中编辑其余部分。这是我经常用于删除的技术,而不是使用内置的CanUserDeleteRows。