实现INotifyCollectionChanged接口

时间:2010-12-24 16:51:33

标签: wpf data-binding observablecollection inotifycollectionchanged

我需要实现一个具有特殊功能的集合。另外,我想将这个集合绑定到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; } }

问题是尽管我实现了INotifyCollectionChanged接口,但是当集合更新时ListView不会更新。

我知道我的绑定很好(在XAML中),因为当我使用ObservableCollecion类而不是myCollecion类时:

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

ListView更新

有什么问题?

1 个答案:

答案 0 :(得分:2)

为了让你的集合被消费,你也应该实现IEnumerable和IEnumerator。虽然,你可能最好不要继承ObservableCollection<T>