2010-08-23 5 views

Répondre

1

J'ai mon WPF app DataGrid mis en place comme si:

1) défini manuellement toutes les colonnes, définissez leurs liaisons et pour chaque liaison spécifié qu'il informe sur les mises à jour des sources

2) Ajout d'un événement gestionnaire pour l'événement SourceUpdated

3) du DataGrid Dans le gestionnaire d'événements que je le code suivant:

this.updatedItems.Add(BindingOperations.GetBindingExpression(e.TargetObject, e.Property).DataItem as MyClass); 

updatedItems est un HashSet <> et MyClass est le type d'objets liés à ItemsSouce de la grille de données.

4) Lorsque l'utilisateur clique sur le bouton de sauvegarde, j'énumère simplement le hashset. Hashset est sympa, car il ne contient que des valeurs uniques. Ainsi, si une ligne est modifiée plusieurs fois ou même si plusieurs cellules de la même ligne sont éditées, le hashset ne contiendra toujours qu'une seule entrée pour l'objet.

+0

Salut Marko, l'événement SourceUpdated ne se déclenche pas lorsque je modifie le DataGrid manuellement. J'ai également défini NotifiesOnSourceUpdates = true pour toutes mes colonnes liées. Pouvez-vous s'il vous plaît me corriger si je me trompe ou si j'ai raté quelque chose – ksvimal

+0

Hmm. Utilisez-vous le DataGrid fourni avec .NET4 ou le DataGrid du WPF Toolkit? Je ne sais pas si les deux ont des différences de comportement dans ce cas (j'utilise le. NET4 un). Assurez-vous que les liaisons ont également UpdateSourceTrigger = PropertyChanged. En mettant à jour manuellement vous devez taper dans les valeurs ou définir les valeurs dans le code? – Marko

+0

Salut Marco, j'ai raté UpdateSourceTrigger = PropertyChanged maintenant son fonctionnement. Merci – ksvimal

0

Bien qu'il existe une propriété RowState sur votre ligne de données (il existe également un événement RowChanged), mais assurez-vous que vous en avez besoin. Suis-je dans l'hypothèse fausse que la liaison de données détermine automatiquement quelles lignes doivent être mises à jour?