Um ObservableCollectionpode ser atualizado da interface do usuário exatamente como qualquer coleção. A verdadeira diferença é bastante direta:
ObservableCollection<T>implementa INotifyCollectionChangedque 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.
IBindingListfornece 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 BindingListretransmite as notificações de alteração de itens quando seus itens são implementados INotifyPropertyChanged. Se um item gerar um PropertyChangedevento, BindingListele receberá um aumento ListChangedEventcom ListChangedType.ItemChangede e OldIndex=NewIndex(se um item foi substituído OldIndex=-1). ObservableCollectionnão retransmite as notificações do item.
Note que no Silverlight, BindingListnão está disponível como uma opção: No entanto, você pode usar ObservableCollections e ICollectionView(e IPagedCollectionViewse me lembro bem).