У меня есть вопрос о созданном мной классе, который похож на 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 для доступа к коллекции.
Если вам нужно больше кода, дайте мне знать.
Invoke
; это намного медленнее, чем обычный вызов делегата. - person SLaks   schedule 04.06.2010