ObservableCollection mieux qu’ObjectSet

Pourquoi est-il préférable (dans WPF, C #, Entity Framework) de lier ListBox à un ObservableCollection créé sur l’ ObjectSet (à partir d’Entity Framework) plutôt que de se lier directement à ObjectSet ?

Une autre question: lorsque je lie ListBox à ObservableCollection , tout ajout à la collection met à jour ListBox . Génial. Mais ObservableCollection été créé sur ObjectContext (dans Entity Framework) et l’ajout d’un nouvel élément à la collection n’ajoute pas l’élément au contexte … comment résoudre ce problème ????

ObservableCollection implémente INotifyPropertyChanged , ainsi que INotifyCollectionChanged , deux éléments utilisés par WPF pour relier des éléments à l’interface utilisateur. Ainsi, vous pouvez append un élément à ObservableCollection et immédiatement, l’interface utilisateur se mettrait à jour sans interaction de code de votre part. ObjectSet ni l’une ni l’autre, et n’obtient donc pas cette fonctionnalité.

(Note à votre point “Une question de plus”)

Entity Framework 4.1 offre une nouvelle fonctionnalité particulièrement utile dans les applications WPF: la vue locale du contexte de l’object. Il est disponible via la propriété Local de DbSet . Local renvoie une ObservableCollection contenant toutes les entités de type T actuellement rattachées au contexte (et non à l’état Deleted ).

Local est utile car il rest automatiquement synchronisé avec le contexte de l’object. Par exemple: Vous pouvez exécuter une requête pour charger des objects dans le contexte …

 dbContext.Customers.Where(c => c.Country == "Alice's Wonderland").Load(); 

… et ensuite exposer les objects dans le contexte en tant que ObservableCollection

 ObservableCollection items = dbContext.Customers.Local; 

… et utilisez-le comme ItemsSource de la ItemsSource de certains éléments WPF ItemsControl. Lorsque vous ajoutez ou supprimez des objects dans / de cette collection …

 items.Add(newCustomer); items.Remove(oldCustomer); 

… ils sont automatiquement ajoutés / supprimés du contexte EF. L’appel de SaveChanges insérer / de supprimer les objects dans / depuis la firebase database.

De même, append ou supprimer des objects dans / du contexte …

 dbContext.Customers.Add(newCustomer); dbContext.Customers.Remove(oldCustomer); 

… met à jour automatiquement la collection Local et déclenche par conséquent les notifications du moteur de liaison WPF pour mettre à jour l’interface utilisateur.

Voici un aperçu de Local dans EF 4.1.