Question

Do we need to dispose each item inside a ObservableCollection while dispoing the container class? Or can we just dispose the container class, it will dispose all objects inside that class. Say for example:

  public class SomeClass : IDisposable
  {

      private ObservableCollection<JobItem> jobItemTemplates = new ObservableCollection<JobItem>(); 
      public ObservableCollection<JobItem> JobItemTemplates
      {
        get 
        {
            return this.jobItemTemplates; 
        }

        set
        {
            if (this.jobItemTemplates != value)
            {
                this.jobItemTemplates = value;
                this.OnPropertyChanged("JobItemTemplates");
            }
        }
    }
 }

  protected override void OnDispose()
  {        
    GC.SuppressFinalize(this);
    if (this.jobTreeItemViewModelItem != null)
    {
        foreach(JobTreeItemViewModel  item in this.jobTreeItemViewModelItem)
        {
             item.Dispose();
        }
        this.jobTreeItemViewModelItem.Clear();
     }

     this.jobTreeItemViewModelItem = null;
    }
 }
Was it helpful?

Solution

ObservableCollection does not implement IDisposable and it doesn't check the type of the items either. So you'll have to dispose of the items by hand (or implement a IDisposable container for the disposables)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top