2015-10-14 97 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。