У меня есть наблюдаемая коллекция в моей модели ViewModel, привязанной к datagrid. Я хочу реализовать некоторую логику для обновления данных в других окнах на основе изменений в коллекции/обновлениях базы данных (используя LINQ to SQL).Коллекция ObservableCollection Измененное событие не срабатывает
Вот мой взгляд код модели:
public FTViewModel(int JobID)
{
_windowCloseAction = new DelegateCommand(OnWindowClose);
_oFTrn = new ObservableFilesTransmitted(_dataDc, JobID);
_oFTrn.CollectionChanged += oFTrnCollectionChanged;
}
void oFTrnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (FilesTransmitted f in e.NewItems)
f.PropertyChanged += FilesTransmitted_PropertyChanged;
}
if (e.OldItems != null)
{
foreach (FilesTransmitted f in e.OldItems)
f.PropertyChanged -= FilesTransmitted_PropertyChanged;
}
}
void FilesTransmitted_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "DocumentNumber")
{
_filesTransmittedChange = true;
}
_refreshViews = true;
}
и конструктор ObservableCollection:
class ObservableFilesTransmitted : ViewableCollection<FilesTransmitted>
{
public ObservableFilesTransmitted(DocControlDC dataDc, int ID)
{
foreach (FilesTransmitted ftran in dataDc.FilesTransmitteds.Where(x=>x.JobID==ID).OrderByDescending(x => x.TransmittalName))
{
this.Add(ftran);
}
}
}
Отладчик не останавливается в oFTrnCollectionChanged. Я думаю, потому что вызов создания наблюдаемой коллекции происходит до того, как я добавлю событие CollectionChanged. Но, очевидно, я не могу переключить эти две линии. Я просмотрел различные темы StackOverflow и CodeProject, и мне кажется, что я должен работать. Нужно ли добавлять и удалять фиктивный элемент только для вызова обработчика CollectionChanged? Что мне не хватает?
Похоже, что у меня должен быть конструктор (для наблюдаемой коллекции), который не добавляет никаких членов, и функцию, которая добавляет элементы из базы данных. Затем я могу вызвать new, добавить обработчик collectionchanged, а затем заполнить коллекцию. Я надеюсь избежать этого уровня переписывания, хотя, возможно, это единственный разумный способ.
коллекции должна наблюдаемой автоматически огонь.Пушку свойства изменено событие. –