Ajouter une nouvelle ligne immédiatement après l’ajout d’un nouvel élément

J’ai une grid de données comme celle-ci:

     

Choses et choses ressemblent à ceci:

 public ObservableCollection Things { get; set; } 

.

 public class Thing { public ssortingng Blah { get; set; } public Thing() { } } 

Le comportement par défaut de la grid de données consiste à commencer par une nouvelle ligne vide en bas. Lorsque je commence à modifier une propriété de cette ligne, une nouvelle chose est créée et ajoutée à la collection Things. Cependant, une nouvelle ligne vierge ne s’affiche pas avant la fin de la modification (c’est-à-dire appuyez sur la touche Entrée ou sélectionnez une nouvelle ligne / colonne). Existe-t-il un moyen (de préférence sans violer MVVM) d’afficher cette nouvelle ligne vierge immédiatement après le début de l’édition?

C’est le sharepoint départ:

Point de départ

C’est après un double clic sur la ligne vierge et une modification:

Édition

Une fois la modification terminée, une nouvelle ligne vide apparaît:

Nouvelle ligne vide

Mais voici ce que je veux (Nouvelle ligne vierge lors de l’édition):

Nouvelle ligne vide lors de l'édition

Pour obtenir le comportement souhaité, vous devez associer un événement à PreparingCellForEdit la grid de données, qui est déclenché chaque fois que la cellule passe en mode édition.

À partir de cet événement, vous pouvez alors vérifier si la ligne suivante existe (index de cellule en cours + 1) et si ce n’est pas le cas, continuez et créez-le à ce stade.

Je crois que cela va alors créer l’effet souhaité d’avoir la nouvelle ligne ajoutée dès que vous commencez à éditer la cellule.

Par exemple, le gestionnaire d’événements PreparingCellForEdit ajoute un nouvel élément (et génère une nouvelle ligne) chaque fois que la dernière ligne commence un événement d’édition.

 DataGrid dataGrid = sender as DataGrid; if (dataGrid == null) { return; } int currentRow = e.Row.GetIndex(); if (dataGrid.Items.Count - 1 <= currentRow) { Things.Add(new Thing()); } 

Puisque vous vous liez à une collection, vous devrez append un nouvel élément à la collection au lieu d’append un nouvel élément directement à la grid de données. Puisque vous utilisez un ObservableCollection , il devrait automatiquement se mettre à jour pour refléter une nouvelle ligne.

Cependant, cela aurait pour conséquence que vous aurez toujours une Thing en plus dans votre collection, ce que vous ne voudrez peut-être pas.

J’ai trouvé une solution. Vous souhaiterez probablement conserver le focus d’édition de cellule pour pouvoir utiliser dataGrid.CommitEdit (DataGridEditingUnit.Row, false );

Jetez un coup d’oeil ici:

Ajouter une ligne vide à WPF DataGrid juste après l’ajout d’un nouvel élément