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.