Пользовательская коллекция ObservableCollection

У меня есть вопрос о созданном мной классе, который похож на ObserverableCollection. Мой класс в основном имеет те же функции, что и он, но я добавляю к нему некоторые функции автоматической сортировки, когда элементы добавляются в список. Мой вопрос в том, что мой класс реализует интерфейс INotifyCollectionChanged, так что ListView, который отображает мою коллекцию, получает уведомление при изменении коллекции (по крайней мере, это то, что я думал). Каждый раз, когда я добавляю коллекцию или удаляю ее, я уведомляю, что коллекция изменилась, но ListView не отображает эти изменения. Так я не понял, что делает INotifyCollectionChanged? Должен ли я использовать вместо этого INotifyPropertyChanged? Любая помощь по этому вопросу была бы замечательной!

Вот важные части моего урока:

public class AscendingObservableCollection<T> : ICollection<T>, IEnumerable<T>, INotifyCollectionChanged
{

public event NotifyCollectionChangedEventHandler CollectionChanged;
...
protected void OnCollectionChanged()
    {
        CollectionChanged.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
    }
}

Я вызываю OnCollectionChanged () всякий раз, когда коллекция изменяется (добавление / удаление элемента). Я использую NotifyCollectionChangedAction.Reset для всех изменений, поскольку моя коллекция является LinkedList, а конструктору NotifyCollectionChangedEventArgs нужен индекс для флагов NotifyCollectionChangedAction.Add / Remove, которых в LinkedList обычно нет.

My ListView, который использует коллекцию, использует привязку данных к свойству ItemSource для доступа к коллекции.

Если вам нужно больше кода, дайте мне знать.


person Josh    schedule 04.06.2010    source источник
comment
Вы не должны звонить Invoke; это намного медленнее, чем обычный вызов делегата.   -  person SLaks    schedule 04.06.2010
comment
Ой? что я должен использовать вместо этого, BegingInvoke () и EndInvoke ()?   -  person Josh    schedule 04.06.2010
comment
Как насчет CollectionChanged (это, новый новый NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Reset))   -  person Robert Fraser    schedule 04.06.2010
comment
Просто из любопытства, чем вышеупомянутое отличается от invoke? Также я добавил это изменение, и оно по-прежнему не решает мою первоначальную проблему :(   -  person Josh    schedule 04.06.2010


Ответы (1)


Хорошо, я решил проблему после нескольких шагов отладки и поиска. Оказалось, что компонент Notify работал, но у меня была небольшая ошибка в другом разделе моего кода, из-за которой он ломался. Спасибо каждому!

person Josh    schedule 04.06.2010