我想提出一個自定義集合是基於關閉列表中集合對象的變化,其目的是要觀察的,防止重複,排序等如何觀看的自定義集合內
我有一個add方法一樣所以:
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";
用戶3停留在收集的底部,請注意我用我自己的IComparable的實施,它不只是一個字母排序。
我需要集合來捕捉這個變化並通知我,所以我可以做點什麼。
我知道我將要落實的對象INotifyPropertyChanged的,但我不能確定的是如何將採集聽清楚,我可以看到的唯一方法是,如果在add方法我做的:
item.PropertyChanged += (o,e) { ..check then... base.Sort(); };
但是,如果我有10,000個用戶,這是要走的路嗎?
我想你基本上正在實現我在想什麼(列表中每個對象的處理程序)。 – sprocket12
是的,只需要做一個BindingList –
Koryu