Một ObservableCollectioncó thể được cập nhật từ UI chính xác như bất kỳ bộ sưu tập. Sự khác biệt thực sự là khá đơn giản:
ObservableCollection<T>thực hiện INotifyCollectionChangedcung cấp thông báo khi bộ sưu tập được thay đổi (bạn đoán ^^) Nó cho phép công cụ liên kết cập nhật giao diện người dùng khi ObservableCollectioncập nhật.
Tuy nhiên, BindingList<T>thực hiện IBindingList.
IBindingListcung cấp thông báo về thay đổi bộ sưu tập, nhưng không chỉ vậy. Nó cung cấp một loạt các chức năng mà UI có thể sử dụng để cung cấp nhiều thứ hơn là chỉ cập nhật UI theo các thay đổi, như:
- Sắp xếp
- Đang tìm kiếm
- Thêm thông qua nhà máy (chức năng thành viên AddNew).
- Danh sách chỉ đọc (thuộc tính CanEdit)
Tất cả các chức năng này không có sẵn trong ObservableCollection<T>
Một sự khác biệt nữa là BindingListchuyển tiếp thông báo thay đổi mục khi mục thực hiện INotifyPropertyChanged. Nếu một mục đặt ra một PropertyChangedsự kiện, BindingListsẽ nhận được nó một tăng một ListChangedEventvới ListChangedType.ItemChangedvà OldIndex=NewIndex(nếu một mục đã được thay thế, OldIndex=-1). ObservableCollectionkhông chuyển tiếp thông báo mục.
Lưu ý rằng trong Silverlight, BindingListkhông có sẵn dưới dạng tùy chọn: Tuy nhiên, bạn có thể sử dụng ObservableCollections và ICollectionView(và IPagedCollectionViewnếu tôi nhớ rõ).