Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pros and Cons of using Observable Collection over IEnumerable

I am trying to decide if I want to switch all of my IEnumerable collections over to Observable Collections. I cannot find a good explanation of this. What are the Pros and Cons of the Observable Collection in understandable terms?

like image 256
JLott Avatar asked Feb 12 '13 17:02

JLott


2 Answers

You may decide to have IEnumerable<Something> as type of some property, but use ObservableCollection<Something> as the actual value.

If you have a property like this:

private IEnumerable<Something> collectionOfSomething;
public IEnumerable<Something> CollectionOfSomething
{
    get { return collectionOfSomething; }
    set
    {
        collectionOfSomething = value;
        NotifyPropertyChanged("CollectionOfSomething");
    }
}

Now you may simply assign to that property like

someViewModelObject.CollectionOfSomething = new ObservableCollection<Something>();

When you assign or bind to a collection property (for example ItemsControl.ItemsSource), the target object usually checks whether the actual property value implements INotifyCollectionChanged (what ObservableCollection does) and attaches a CollectionChanged handler to get notified about changes in the source collection.

If you later decide to have some other, smarter implementation of INotifyCollectionChanged you do not need to change all your property types. Just replace the assignment(s) by something like this

someViewModelObject.CollectionOfSomething = new MyVerySmartCollection<Something>();
like image 78
Clemens Avatar answered Sep 28 '22 08:09

Clemens


I'd probably frame the answer to your question this way: Does your application need to be notified when your collections change content? If so, then such a change is possibly warranted. My understanding is that the overarching feature of Observable collections is that they provide a mechanism for notifications when the collection changes, whereas IEnumerable provides only a single-iteration enumerator.

I hope that helps.

like image 38
David W Avatar answered Sep 28 '22 07:09

David W