Um ObservableCollection
pode ser atualizado da interface do usuário exatamente como qualquer coleção. A verdadeira diferença é bastante direta:
ObservableCollection<T>
implementa INotifyCollectionChanged
que fornece notificação quando a coleção é alterada (você adivinhou ^^) Permite que o mecanismo de ligação atualize a interface do usuário quando ela ObservableCollection
é atualizada.
No entanto, BindingList<T>
implementa IBindingList
.
IBindingList
fornece notificação sobre alterações na coleção, mas não apenas isso. Ele fornece várias funcionalidades que podem ser usadas pela interface do usuário para fornecer muito mais coisas do que apenas atualizações da interface do usuário de acordo com as alterações, como:
- Ordenação
- Procurando
- Adicionar pela fábrica (função de membro AddNew).
- Lista somente leitura (propriedade CanEdit)
Todas essas funcionalidades não estão disponíveis no ObservableCollection<T>
Outra diferença é que BindingList
retransmite as notificações de alteração de itens quando seus itens são implementados INotifyPropertyChanged
. Se um item gerar um PropertyChanged
evento, BindingList
ele receberá um aumento ListChangedEvent
com ListChangedType.ItemChanged
e e OldIndex=NewIndex
(se um item foi substituído OldIndex=-1
). ObservableCollection
não retransmite as notificações do item.
Note que no Silverlight, BindingList
não está disponível como uma opção: No entanto, você pode usar ObservableCollection
s e ICollectionView
(e IPagedCollectionView
se me lembro bem).