2010-02-12 3 views
0

У меня есть ListView, что я поставил его ItemsSource перечислить все задания (таблица в моей базе данных SQL, ORM является LINQ к SQL), как так:Обновить список ItemsViewViewSource постоянно?

ltvAssignments.ItemsSource = _repo.ListAssignments(); 

(Этот бит кода именно после InitializeCompenent () называется) И за щеколду это, я добавил образец:

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(); 

(где _repo мой Repository, потому что я использую шаблон репозитория) Когда я положил этот кусок кода, прежде чем я устанавливаю ItemsSource в ListView в , показывает образец. НО, когда этот бит кода находится где-то после того, как ItemSource установлен, образец не отображается. Как я могу постоянно обновлять ItemsSource каждый раз, когда добавляется Assignment?
Мои IRepository:

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

ответ

3

Я думаю, что причина в том, что ваш IAssignmentRepository не реализует интерфейс INotifyCollectionChanged.

Когда вы добавляете данные перед настройкой ItemsSource, данные уже есть для просмотра, как только обновляется GUI. Но когда вы делаете последующие изменения, так как репозиторий не будет уведомлять об управлении базой данных, никаких обновлений не происходит.

Я также предполагаю, что вы правильно установили DataContext.

+0

На самом деле я не задал свойство DataContext. –

+0

Это проблема? –

+0

Абсолютно вам необходимо установить DataContext, или привязка данных не будет работать. Ниже приведен быстрый тест (после того, как ваше репо реализует INotifyCollectionChanged) - запустите приложение и посмотрите, не возникли ли ошибки привязки данных в окне вывода при обновлении вашего репозитория. Чтобы устранить любые другие возможности, попробуйте реализовать тестовый контейнер, который наследуется от ObservableCollection , так как это никогда не подводило меня. Он реализует для вас INotifyCollectionChanged. Если вы используете это, и вы не получаете обновлений, вы узнаете, что вам нужно правильно установить DataContext. – Dave