private void InitChild() { WindowFolderEntityCollection subFolders = _windowComponentService.GetFolderCollection(this.UniqueID.ToString()); children = new FolderAddressNode[subFolders.Count]; for (int i = 0; i < subFolders.Count; i++) { children[i] = new FolderAddressNode((WindowFolderEntity)subFolders[i], this); } }
/// <summary> /// 获取隶属于指定目录的子目录集合 /// </summary> /// <param name="folderId"></param> /// <returns></returns> public WindowFolderEntityCollection GetFolderCollection(string folderId) { if (folderId == null) { folderId = String.Empty; } WindowFolderEntityCollection collection = new WindowFolderEntityCollection(); foreach (XElement element in _indexXml.XPathSelectElements(String.Format(XPATH_Index_SelectFolder_ByParentId, folderId))) { WindowFolderEntity formFolderEntity = new WindowFolderEntity(); //FormFolderEntity在往Index文件里存的时候是直接ToXml的 //所以此处直接FromXml即可 formFolderEntity.FromXml(element.ToString()); collection.Add(formFolderEntity); } return(collection); }
/// <summary> /// 此方法供DeleteFolder调用 /// 作用是避免每次递归都SaveXml /// </summary> /// <param name="id"></param> /// <param name="deleteForm"></param> private void ProcessFolderDelete(string id) { WindowFolderEntity folderEntity = GetFolderEntity(id); Debug.Assert(folderEntity != null, "folderEntity 为 null"); //递归当前目录下所有子目录,删除之 WindowFolderEntityCollection folderCollection = GetFolderCollection(id); foreach (WindowFolderEntity folder in folderCollection) { ProcessFolderDelete(folder.Id); } //删除窗体 foreach (XElement element in from c in _indexXml.XPathSelectElements(String.Format(XPATH_Index_SelectWindow_ByFolderId, id)) select c) { string formId = element.Attribute("Id").Value; //移除索引信息 element.Remove(); //移除实体文件 _packageService.Current.DeleteFile(Path.Combine(Constant.PACKAGE_WINDOW_FOLDER, formId)); //移除缓存 _cachingService.Remove(formId); } //从索引文件中删除本目录 _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectFolder, id)).Remove(); //发布事件 WindowFolderEventArgs args = new WindowFolderEventArgs(folderEntity); _eventAggregator.GetEvent <WindowFolderRemovedEvent>().Publish(args); }