public void DeleteItem(LibraryModelItem item)
        {
            XElement node =
                (from nedNodeElements in LibraryDocument.Descendants(NedNodeTag)
                 where (string)nedNodeElements.Attribute(NedNodeIdAttribute) == item.Id
                 select nedNodeElements).FirstOrDefault();

            if (node != null)
            {
                node.Remove();
            }

            if (item is CatalogueModelItem)
            {
                CatalogueItems.Remove(item as CatalogueModelItem);
                var query = from categoriesToRemove in CategoryItems where categoriesToRemove.ParentId == item.Id select categoriesToRemove;
                List <CategoryModelItem> catTempList = query.ToList <CategoryModelItem>();
                foreach (LibraryModelItem itemToRemove in catTempList)
                {
                    DeleteItem(itemToRemove);
                }
            }
            else if (item is CategoryModelItem)
            {
                CategoryItems.Remove(item as CategoryModelItem);
                foreach (LibraryModelItem miToRemove in (item as CategoryModelItem).Children())
                {
                    DeleteItem(miToRemove);
                }
            }
            else if (item is MediaItemsListModelItem)
            {
                MediaItemsListModelItem mediaItem = item as MediaItemsListModelItem;
                MediaItems.Remove(mediaItem);
                App.Engine.DeleteMediaItem(mediaItem);
            }
            else
            {
                Debug.Assert(false, FileLanguage.LibraryModel_RemovingUnknowTypeError);
            }
            App.Engine.StatisticsManager.LogItemDeleted(item.Id);
            OnLibraryItemRemoved(new LibraryRemovedEventArgs()
            {
                RemovedItem = item
            });
        }
        private void UpdateParentOnLibraryItemRemoved(object sender, LibraryRemovedEventArgs args)
        {
            LibraryModelItem item = args.RemovedItem as LibraryModelItem;

            if (args.RemovedItem is MediaItemsListModelItem)
            {
                CategoryModelItem parent = (from parentItem in CategoryItems where parentItem.Id == item.ParentId select parentItem).FirstOrDefault();
                if (parent != null)
                {
                    parent.RemoveChild(item as MediaItemsListModelItem);
                }
            }
            else if (args.RemovedItem is CategoryModelItem)
            {
                CatalogueModelItem parent = (from parentItem in CatalogueItems where parentItem.Id == item.ParentId select parentItem).FirstOrDefault();
                if (parent != null)
                {
                    int childrenCount = (from categoryItem in CategoryItems where categoryItem.ParentId == item.ParentId select categoryItem).Count();
                    parent.Subtitle = CatalogueModelItem.GetSubtitleString(childrenCount);
                }
            }
            // Currently there is no need to handle CatalogueModelItem removal
        }