2015-10-14 96 views
0

我有一个数据网格3列,它绑定到一个具有3个属性的类的集合。 我想添加一个新行,因为一行正在开始编辑。现在默认的WPF行为是:键入整行,然后单击输入或失去焦点添加新行。我想要在当前行编辑BEGINS时添加行。wpf datagrid行编辑开始事件添加新行

似乎没有任何行编辑开始事件。我可以锁定并以编程方式添加空白人即新行。

有没有这样做的少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; 



    } 

类: 公共类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

可以使用AddingNewItem事件添加了.NET 4.5到DataGrid,这将新项目添加到DataGrid之前发生。

如果.NET 4.5不是一个选项,我会关闭CanUserAddRows,然后创建一个按钮,直接将一个新项目添加到绑定到ItemsSource的集合中,并且在该按钮中,您可以执行任何初始化或计算那么用户可以编辑DataGrid中的其余部分。这是我经常用于删除的技术,而不是使用内置的CanUserDeleteRows。