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:
C’est après un double clic sur la ligne vierge et une modification:
Une fois la modification terminée, une nouvelle ligne vide apparaît:
Mais voici ce que je veux (Nouvelle ligne vierge 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