private void Applications_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            var comparer = new ApplicationEqualityComparer();

            if (e.Action.Equals(NotifyCollectionChangedAction.Add))
            {
                foreach (var item in e.NewItems)
                {
                    var app = item as Application;
                    base.Children.Add(new ApplicationTreeViewItemViewModel(app, this));
                }
            }
            else if (e.Action.Equals(NotifyCollectionChangedAction.Remove))
            {
                foreach (var item in e.OldItems)
                {
                    var appsToRemove = new List <TreeViewItemViewModel>();
                    var app          = item as Application;
                    foreach (var treeView in base.Children)
                    {
                        var appTreeView = treeView as ApplicationTreeViewItemViewModel;
                        if (comparer.Equals(appTreeView.Application, app))
                        {
                            appsToRemove.Add(treeView);
                        }
                    }
                    foreach (var treeView in appsToRemove)
                    {
                        base.Children.Remove(treeView);
                    }
                }
            }
            else if (e.Action.Equals(NotifyCollectionChangedAction.Replace))
            {
                foreach (var item in e.NewItems)
                {
                    var app = item as Application;
                    foreach (var treeView in base.Children)
                    {
                        var appTreeView = treeView as ApplicationTreeViewItemViewModel;
                        if (comparer.Equals(appTreeView.Application, app))
                        {
                            appTreeView.Application = app;
                            if (!appTreeView.HasNotBeenPopulated)
                            {
                                appTreeView.LoadChildren();
                            }
                        }
                    }
                }
            }
            else if (e.Action.Equals(NotifyCollectionChangedAction.Reset))
            {
                base.Children.Clear();
            }
        }
 private void Applications_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     var comparer = new ApplicationEqualityComparer();
     if (e.Action.Equals(NotifyCollectionChangedAction.Add))
     {
         foreach (object item in e.NewItems)
         {
             var app = item as Application;
             base.Children.Add(new ApplicationTreeViewItemViewModel(app, this));
         }
     }
     else if (e.Action.Equals(NotifyCollectionChangedAction.Remove))
     {
         foreach (object item in e.OldItems)
         {
             var appsToRemove = new List<TreeViewItemViewModel>();
             var app = item as Application;
             foreach (TreeViewItemViewModel treeView in base.Children)
             {
                 var appTreeView = treeView as ApplicationTreeViewItemViewModel;
                 if (comparer.Equals(appTreeView.Application, app))
                     appsToRemove.Add(treeView);
             }
             foreach (TreeViewItemViewModel treeView in appsToRemove)
                 base.Children.Remove(treeView);
         }
     }
     else if (e.Action.Equals(NotifyCollectionChangedAction.Replace))
     {
         foreach (object item in e.NewItems)
         {
             var app = item as Application;
             foreach (TreeViewItemViewModel treeView in base.Children)
             {
                 var appTreeView = treeView as ApplicationTreeViewItemViewModel;
                 if (comparer.Equals(appTreeView.Application, app))
                 {
                     appTreeView.Application = app;
                     if (!appTreeView.HasNotBeenPopulated)
                         appTreeView.LoadChildren();
                 }
             }
         }
     }
     else if (e.Action.Equals(NotifyCollectionChangedAction.Reset))
         base.Children.Clear();
 }