Woot, premier message de dépassement de pile! On m'a demandé de travailler sur une application de bureau pour améliorer le processus d'inventaire de mon entreprise. Je me suis amusé avec WPF à l'école et je me suis dit que je commencerais là. Après avoir fait des recherches, j'ai appris à connaître MVVM, à mettre en place un design et à aller de l'avant. Finalement, je suis coincé et je cherche de l'aide et aussi une vérification de santé mentale pour voir si je suis sur le bon chemin.Définir le WPG DataGridCell sélectionné pour être focalisé et éditable lors de l'événement
J'ai un DataGrid à une seule colonne lié à une collection observable. Les utilisateurs de l'application utilisent un pistolet d'analyse pour entrer des valeurs. Une valeur potentielle que j'attrape dans mon objet de modèle "Cell" est une valeur "MoveNextColumn". Cela déclenche un événement personnalisé dans mon modèle qui est géré dans le modèle View. Le gestionnaire est supposé simuler des entrées vides pour toutes les lignes restantes dans cette colonne, mettre le focus sur la dernière ligne et attendre l'entrée avant de continuer. Voici donc ce que j'ai jusqu'à présent:
private void dummyCell_MoveToNextColumn(object sender, RoutedEventArgs e) {
e.Handled = true;
// Cell is the model object containing the parsing rules and raising events
var lSender = sender as Cell;
var gridItems = ViewGridReference.Items;
var lastItem = gridItems[gridItems.Count - 1];
if (lSender == lastItem) {
// We are at the bottom of the column
// Move the program on to the next column
CurrentColumn++;
OnPropertyChanged("ItemPositions");
} else {
// Simulate "empty position" input for this cell and all cells down the column
// Cells are validating themselves as the simulation progresses
foreach (Cell item in ViewGridReference.Items) {
item.ActualItemCode = string.Empty;
}
// ViewGridReference is a reference to my DataGrid set from the view
ViewGridReference.Focus();
ViewGridReference.SelectedIndex = gridItems.Count - 1;
ViewGridReference.CurrentCell = new DataGridCellInfo(lastItem, ViewGridReference.Columns[0]);
((DataGridCell)ViewGridReference.SelectedItem).Focus();
}
}
Tout cela semble fonctionner comme prévu: toutes les lignes reçoivent l'entrée en blanc et sont validés (j'utilise les propriétés de couleur dans la cellule à laquelle la vue se fixe pour signifier la validité de l'entrée). Malheureusement, bien que l'accent soit mis sur la dernière ligne comme souhaité, elle ne peut pas être modifiée et l'utilisateur ne peut pas envoyer une autre valeur "MoveNextColumn" qui pourrait activer le programme. Le but ici est de minimiser toute interaction au clavier. Tout devrait être fait avec des pistolets de balayage et des codes à barres.
Des idées sur la façon de rendre la cellule sélectionnée modifiable après l'exécution de ce code? Tout commentaire "hé, votre conception craint" serait cool aussi. Ceci est nouveau pour moi et je suis ouvert à constructive critique.