ObservableCollection
สามารถอัปเดตจาก UI เหมือนกับคอลเลกชันใด ๆ ความแตกต่างที่แท้จริงค่อนข้างตรงไปตรงมา:
ObservableCollection<T>
ใช้เครื่องมือINotifyCollectionChanged
ที่ให้การแจ้งเตือนเมื่อมีการเปลี่ยนแปลงคอลเลกชัน (คุณเดาได้ว่า ^^) จะช่วยให้เอ็นจินการเชื่อมโยงปรับปรุง UI เมื่อObservableCollection
มีการอัปเดต
อย่างไรก็ตามการดำเนินการBindingList<T>
IBindingList
IBindingList
ให้การแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงการรวบรวม แต่ไม่เพียงแค่นั้น มันมีฟังก์ชั่นมากมายที่ UI สามารถใช้เพื่อมอบสิ่งต่าง ๆ ได้มากกว่าการอัปเดต UI ตามการเปลี่ยนแปลงเช่น:
- การเรียงลำดับ
- ค้นหา
- เพิ่มจากโรงงาน (ฟังก์ชั่นสมาชิก AddNew)
- รายการแบบอ่านอย่างเดียว (คุณสมบัติ CanEdit)
ฟังก์ชันทั้งหมดนี้ไม่สามารถใช้งานได้ ObservableCollection<T>
ความแตกต่างก็คือว่าแจ้งเตือนการเปลี่ยนแปลงรีเลย์รายการเมื่อรายการของใช้BindingList
INotifyPropertyChanged
หากรายการหนึ่งเกิดขึ้นPropertyChanged
เหตุการณ์BindingList
จะได้รับมันเพิ่มListChangedEvent
ด้วยListChangedType.ItemChanged
และOldIndex=NewIndex
(หากรายการถูกแทนที่OldIndex=-1
) ObservableCollection
ไม่ถ่ายทอดการแจ้งเตือนรายการ
โปรดทราบว่าใน Silverlight BindingList
ไม่สามารถใช้เป็นตัวเลือก: คุณสามารถใช้ObservableCollection
s และICollectionView
(และIPagedCollectionView
ถ้าฉันจำได้ดี)