J'ai une grille de données dans mon application MVVM qui, en raison de la manière dont le client souhaite que les données soient affichées, utilise des colonnes de modèle. Ils veulent cependant une fonctionnalité d'entrée de données typique (appuyer sur Entrée pour vérifier les données, valider la ligne si elle est valide, se concentrer sur la première zone de texte de la ligne suivante et appuyer sur Tab pour mettre en surbrillance la zone de texte suivante ...). En outre, les données sont souvent importées d'une source externe dans la grille, généralement des milliers d'enregistrements à la fois.Problème de saisie de données de données MVVM WPF
À l'heure actuelle, j'ai un événement Loaded connecté à chaque zone de texte que j'utilise pour définir le focus après l'ajout de nouvelles lignes. Mon problème est que la grille se détraque quand j'importe beaucoup de lignes. Lorsque l'utilisateur défile, les événements Loaded sont déclenchés et la grille devient fondamentalement inutilisable. J'ai désactivé la virtualisation pour éviter cela, et j'ai trouvé que ma grille prenait un gig de RAM dans certaines configurations, ce qui est inacceptable. Je n'arrive pas à trouver un moyen de faire en sorte que cette grille fonctionne comme ils le souhaitent sans utiliser une énorme quantité de mémoire. Il semble que je doive juste pouvoir focaliser une zone de texte dans une ligne nouvellement ajoutée, mais puisque la validation des données est effectuée dans le viewmodel, je n'ai pas accès à la nouvelle ligne dans codebehind, donc je ne peux pas appelez "newtextbox.focus()" ou autre. Je deviens assez désespéré ici, toutes les suggestions seraient massivement appréciées.
Focus est une sorte de rabat-joie dans WPF. Consultez ce post par Josh Smith http://joshsmithonwpf.wordpress.com/2010/03/16/control-input-focus-from-viewmodel-objects/, peut-être y at-il des indices pour une solution. – Matthieu
Qu'en est-il d'une solution où vous sautez l'édition/validation dans la grille et utilisez simplement la grille pour l'affichage. Ensuite, quand une ligne de grille est dite, double-clique, vous ouvrez un éditeur de lignes de grille qui fonctionne comme l'édition de lignes dans la grille. – hkon
Cela ne va certainement pas voler ... le client veut entrer des données directement dans la grille. J'ai essayé. Avez-vous utilisé des insertions en masse dans ObservableCollection qui est lié à votre grille de données? – drowned