我正在制作一个基于列表的自定义集合,其目的是可观察、防止重复、排序等。
我有一个像这样的添加方法:
public class SortedObservableCollection<T> : List<T>, INotifyPropertyChanged, INotifyCollectionChanged
{
public void Add(T item)
{
base.Add(item);
base.Sort();
this.OnPropertyChanged("Count");
this.OnPropertyChanged("Item[]");
this.OnCollectionChanged(NotifyCollectionChangedAction.Add, item);
}
}
但不知何故,当对象在集合内直接更改时,我需要自动采取措施,或者通知集合以便它可以再次进行排序。
喜欢 :
SortedObservableCollection<IRCUser> users = new SortedObservableCollection<IRCUser>();
users.Add(new IRCUser { Nick = "User1", Status = IRCUserStatus.Unknown });
users.Add(new IRCUser { Nick = "User2", Status = IRCUserStatus.Unknown });
users.Add(new IRCUser { Nick = "User3", Status = IRCUserStatus.Unknown });
users.Single(x => x.Nick == "User3").Nick = "User11";
User3 位于集合的底部,请注意我使用的是我自己的 IComparable 实现,它不仅仅是按字母顺序排序。
我需要收藏来捕捉这个变化并通知我,这样我才能做点什么。
我知道我必须在对象上实现 INotifyPropertyChanged,但我不确定集合将如何捕获它,我能看到的唯一方法是我是否在 add 方法上执行:
item.PropertyChanged += (o,e) { ..check then... base.Sort(); };
但是如果我有 10,000 个用户,这是要走的路吗?