2010-02-12 3 views
0

J'ai un ListView que je l'ai mis est ItemsSource à la liste de toutes les missions (une table dans ma base de données SQL, ORM est LINQ to SQL) comme ceci:Mettre à jour ItemsSource de ListView Constamment?

ltvAssignments.ItemsSource = _repo.ListAssignments(); 

(Ce bit de code est exactement après InitializeCompenent () est appelé) Et pour le plaisir de le faire, j'ai ajouté un échantillon:

Assignment sample1 = new Assignment() 
     { 
      Title = "A Test", 
      Start = DateTime.Now, 
      Due = DateTime.Now, 
      Kind = (byte) Kind.Assignment, 
      Priority = (byte) Priority.Medium, 
     }; 
     _repo.CreateAssignment(sample1); 
     _repo.SaveChanges(); 

(où _repo est mon dépôt parce que je suis en utilisant le modèle de référentiel) Quand je mets ce morceau de code avant mon ItemsSource du ListView , l'échantillon montre. MAIS quand ce bit de code est n'importe où après que ItemsSource soit placé, l'échantillon ne montre pas. Comment puis-je constamment mettre à jour ItemsSource chaque fois qu'une affectation est ajoutée?
Mon IRepository:

public interface IAssignmentRepository 
{ 
    Assignment CreateAssignment(Assignment assignmentToCreate); 
    void DeleteAssignment(Assignment assignmentToDelete); 
    Assignment GetAssignment(int id); 
    IEnumerable<Assignment> ListAssignments(); 
    void SaveChanges(); 
} 

Répondre

3

Je pense que la raison est que votre IAssignmentRepository ne met pas en oeuvre l'interface INotifyCollectionChanged.

Lorsque vous ajoutez les données avant de définir ItemsSource, les données sont déjà disponibles pour la visualisation dès que l'interface graphique est mise à jour. Mais lorsque vous effectuez des modifications ultérieures, puisque le référentiel ne notifie pas le contrôle de la base de données, aucune mise à jour ne se produit.

Je suppose également que vous avez correctement défini DataContext.

+0

En fait, je n'ai pas défini la propriété DataContext. –

+0

Est-ce un problème? –

+0

Absolument, vous devez définir le DataContext ou la liaison de données ne fonctionnera pas. Voici un test rapide (après que votre dépôt implémente INotifyCollectionChanged) - exécutez votre application, et voyez si vous obtenez des erreurs de liaison de données dans la fenêtre de sortie lorsque vous mettez à jour votre référentiel. Pour éliminer toute autre possibilité, essayez de mettre en œuvre un conteneur de test héritant de ObservableCollection , car cela ne m'a jamais échoué. Il implémente INotifyCollectionChanged pour vous. Si vous l'utilisez et que vous n'obtenez pas de mises à jour, vous saurez que vous devez obtenir le jeu DataContext correctement. – Dave

Questions connexes