Реализация интерфейса INotifyCollectionChanged - PullRequest
4 голосов
/ 24 декабря 2010

Мне нужно реализовать коллекцию со специальными возможностями. Кроме того, я хочу связать эту коллекцию с ListView, поэтому я закончил со следующим кодом (я опустил некоторые методы, чтобы сделать его короче здесь, на форуме):

public class myCollection<T> : INotifyCollectionChanged
{
    private Collection<T> collection = new Collection<T>();
    public event NotifyCollectionChangedEventHandler CollectionChanged;

    public void Add(T item)
    {
        collection.Insert(collection.Count, item);
        OnCollectionChange(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
    }

    protected virtual void OnCollectionChange(NotifyCollectionChangedEventArgs e)
    {
        if (CollectionChanged != null)
            CollectionChanged(this, e);
    }
}

Я хотел проверить это с помощью простого класса данных:

public class Person
{
    public string GivenName { get; set; }
    public string SurName { get; set; }
}

Итак, я создал экземпляр класса myCollection следующим образом:

myCollection<Person> _PersonCollection = new myCollection<Person>();
public myCollection<Person> PersonCollection
{ get { return _PersonCollection; } }

Проблема в том, что ListView не обновляется при обновлении коллекции, хотя я реализовал интерфейс INotifyCollectionChanged.

Я знаю, что моя привязка в порядке (в XAML), потому что, когда я использую класс ObservableCollecion вместо класса myCollecion, вот так:

 ObservableCollection<Person> _PersonCollection = new ObservableCollection<Person>();
    public ObservableCollection<Person> PersonCollection
    { get { return _PersonCollection; } }

Обновления ListView

В чем проблема?

1 Ответ

2 голосов
/ 24 декабря 2010

Для того, чтобы ваша коллекция использовалась, вы должны также реализовать IEnumerable и IEnumerator.Хотя вам, вероятно, лучше подклассифицировать ObservableCollection<T>

...