2017-09-13 2 views
1

Je suis nouveau en programmant dans wpf et C#. J'ai un petit problème avec une grille de données. La grille est liée à une table EF.L'élément d'interface de liaison n'est pas actualisé par la valeur de modification dans Itemsource

Je peux voir et modifier tous les champs et enregistrer les modifications apportées à la base de données. Le problème est. Lorsque je sauvegarde les données via context.savechanges dans la base de données SQL, le déclencheur de la table SQL Server a modifié certains champs de l'enregistrement.

Lorsque Recharger l'entité pour l'élément currentItem après la commande save, je peux voir les données modifiées dans mon entité mais pas dans mon interface utilisateur. Je dois faire un datagrid.items.refresh pour voir les changements. Mais le rafraîchissement n'est pas performant et je perds la position actuelle de la cellule. J'ai besoin d'un moyen, pour pousser les modifications de SQL-Server sur l'enregistrement en cours à la volée à l'interface utilisateur après le changement sur le terrain dans l'interface utilisateur.

Vous avez des idées?

Dans un élément TextBox simpel sur une fenêtre, je peux utiliser BindingExpression pour pousser les changements via binding.UpdateTarget. Mais ce n'est pas possible dans DatagridTextColumn.

+0

Vous pouvez mettre en œuvre 'INotifyPropertyChanged' dans vos classes d'entités. – dymanoid

Répondre

0

Votre classe d'entité doit implémenter l'interface INotifyPropertyChanged et déclencher des notations de modification chaque fois qu'une propriété liée aux données est définie sur une nouvelle valeur.

Si vous utilisez des classes d'entités générées automatiquement, vous devez modifier le modèle que ceux-ci sont générés à partir de:

How to get property change notifications with EF 4.x DbContext generator

Ou vous pouvez lier à vos propres classes d'emballage qui implémentent cette interface:

Implement INotifyPropertyChanged on generated Entity Framework classes