2010-10-04 4 views
1

Bonjour,Rafraîchissant Listbox après avoir ajouté élément DataContext

Je suis en train d'utiliser comme Linq pour datacontext SQL pour une zone de liste dans WPF.

Fondamentalement, j'affecte le Linq DataContext à la propriété DataContext du formulaire. Ensuite, je le lie à la liste.ItemsSource.

Tout fonctionne bien, je peux montrer les détails de chacun de mes éléments dans une zone de texte (schéma maître-détails).

La chose est, je voudrais être en mesure d'ajouter un nouvel élément à la liste:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 

     Button btn = sender as Button; 

     var table = lst_markets.ItemsSource as System.Data.Linq.Table<Market>; 
     table.InsertOnSubmit(new Market() { IdMarket = Guid.NewGuid(), Name = txt_newmarket.Text }); 
     table.Context.SubmitChanges(); 
    } 

La valeur est en effet ajouté à la base de données, mais la zone de liste n'est pas rafraîchi.

Que dois-je faire pour actualiser la liste?

Merci,

Jeremie

Répondre

2

Table<TEntity> n'implémente pas INotifyCollectionChanged, de sorte que le gestionnaire de liaison ne soit pas averti que le contenu de la collection ont changé.

Quelques options pour vous:

  • garder un ObservableCollection que vous remplissez de la table, et garder synchronisés. Lorsque vous ajoutez ou supprimez des éléments, la liste reste synchronisée via la liaison. See this article pour quelque chose de similaire
  • Hack around it - initialise lst_markets.ItemsSource à null et revient à la table lors du changement de la collection. Cela provoquerait une relance complète, et se sent comme un hack sale, mais devrait fonctionner.
  • Ne faites pas cela! Un Table<T> n'est pas une collection - il représente une requête. Liez à une collection à la place. Si je me souviens bien, chaque fois que vous itérez une table, elle interroge la base de données, ce qui signifie que chaque fois que la listbox a besoin d'énumérer, ou le gestionnaire de liaison, ou votre code ui fait la même chose.
  • This forum post a un ObservableEntitySetWrapper qui peut vous donner quelques idées.

Voir aussi cette question SO: How to refresh a WPF DataGrid?

+0

La collection observable en utilisant l'événement CollectionChanged est clairement la façon la plus simple. À votre santé – SRKX

Questions connexes