Một ObservableCollection
có 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 INotifyCollectionChanged
cung 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 ObservableCollection
cập nhật.
Tuy nhiên, BindingList<T>
thực hiện IBindingList
.
IBindingList
cung 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à BindingList
chuyể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 PropertyChanged
sự kiện, BindingList
sẽ nhận được nó một tăng một ListChangedEvent
với ListChangedType.ItemChanged
và OldIndex=NewIndex
(nếu một mục đã được thay thế, OldIndex=-1
). ObservableCollection
không chuyển tiếp thông báo mục.
Lưu ý rằng trong Silverlight, BindingList
không có sẵn dưới dạng tùy chọn: Tuy nhiên, bạn có thể sử dụng ObservableCollection
s và ICollectionView
(và IPagedCollectionView
nếu tôi nhớ rõ).