private void LoadTree() { FolderEntityIndex rootFolder = new FolderEntityIndex(new WindowFolderEntity() { Id = String.Empty, Name = Language.Current.ExplorerView_RootFolder }); rootFolder.Items = _windowArchive.GetIndexList(); _navigationTreeController.DataBind(rootFolder); }
private void InitCommands() { #region Commands _addFolderCommand = new AddFolderCommand() { GetArgumentHandler = () => { FolderEntityIndex folderEntityIndex = _currentFolder; return(folderEntityIndex.Folder); } }; _addWindowCommand = new AddWindowCommand() { CanExcuteHandler = () => { return(_currentFolder != null); }, GetArgumentHandler = () => { FolderEntityIndex folderEntityIndex = _currentFolder; return(folderEntityIndex.Folder); } }; _editCommand = new EditCommand() { CanExcuteHandler = () => { return(_controller.SelectedItemsCount == 1); }, GetArgumentHandler = () => { return(_controller.GetSelectedItem <IEntityIndex>()); } }; _deleteCommand = new DeleteCommand() { CanExcuteHandler = () => { return(_controller.SelectedItemsCount > 0); }, GetArgumentHandler = () => { return(_controller.GetSelectedItems <IEntityIndex>()); } }; #endregion }
/// <summary> /// 绑定数据 /// currentType 表示当前列表中显示的数据的类型,这个不能从contextData上取,因为contextData可能是个ToolStripItemFolder之类 /// listType是当前显示的list中的数据的类型 /// contextData是list所属对象(当前列表中的文件夹,窗体的父级文件夹) /// </summary> /// <param name="list"></param> /// <param name="type"></param> /// <param name="contextData"></param> public void DataBind(Type dataType, IList list, Type listType, object contextData) { //目前,还有可能是 WindowEntityIndex if (contextData is FolderEntityIndex) { _currentFolder = (FolderEntityIndex)contextData; } else { _currentFolder = null; } _controller.DataBind(list, listType, contextData); }
private void dataGridViewForms_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.RowIndex < 0) { return; } IEntityIndex entityIndex = (IEntityIndex)dataGridViewForms.SelectedRows[0].DataBoundItem; if (entityIndex is FolderEntityIndex) { FolderEntityIndex folderIndex = (FolderEntityIndex)entityIndex; this.Folder = folderIndex.Folder; } }
//此处需要把Folder封装在Index里面了 /// <summary> /// 获取指定目录下的目录和窗体的Index集合 /// 如果folderId为空串,则从根目录获取 /// 目录将进行递归,将获取所有子目录下的目录和窗体 /// </summary> /// <param name="folderId"></param> /// <returns></returns> public List <IEntityIndex> GetIndexList(string folderId) { List <IEntityIndex> list = new List <IEntityIndex>(); foreach (XElement element in _indexXml.XPathSelectElements( String.Format(XPATH_Index_SelectFolder_ByParentId, folderId))) { FolderEntityIndex entity = new FolderEntityIndex(); entity.FromXml(element.ToString()); entity.Items = GetIndexList(entity.Id); list.Add(entity); } list.AddRange(GetWindowIndexList(folderId)); return(list); }
/// <summary> /// 清除列,数据源,上下文相关数据 /// </summary> public void Clear() { _controller.Clear(); _currentFolder = null; }
private void InitCommands() { #region Commands _addFolderCommand = new AddFolderCommand() { GetArgumentHandler = () => { FolderEntityIndex folderEntityIndex = _navigationTreeController.GetSelectedData <FolderEntityIndex>(true); return(folderEntityIndex.Folder); } }; _editFolderCommand = new EditFolderCommand() { CanExcuteHandler = () => { return(_navigationTreeController.GetSelectedData <FolderEntityIndex>() != null); }, GetArgumentHandler = () => { FolderEntityIndex folderEntityIndex = _navigationTreeController.GetSelectedData <FolderEntityIndex>(true); return(folderEntityIndex.Folder); } }; _deleteFolderCommand = new DeleteFolderCommand() { CanExcuteHandler = () => { return(_navigationTreeController.GetSelectedData <FolderEntityIndex>() != null); }, GetArgumentHandler = () => { FolderEntityIndex folderEntityIndex = _navigationTreeController.GetSelectedData <FolderEntityIndex>(true); return(new List <WindowFolderEntity>() { folderEntityIndex.Folder }); } }; _addWindowCommand = new AddWindowCommand() { CanExcuteHandler = () => { return(_navigationTreeController.GetSelectedData <FolderEntityIndex>(true) != null); }, GetArgumentHandler = () => { FolderEntityIndex folderEntityIndex = _navigationTreeController.GetSelectedData <FolderEntityIndex>(true); return(folderEntityIndex.Folder); } }; _editWindowCommand = new EditWindowCommand() { CanExcuteHandler = () => { return(_navigationTreeController.GetSelectedData <WindowEntityIndex>() != null); }, GetArgumentHandler = () => { WindowEntityIndex windowEntityIndex = _navigationTreeController.GetSelectedData <WindowEntityIndex>(); return(windowEntityIndex.Window); } }; _deleteWindowCommand = new DeleteWindowCommand() { CanExcuteHandler = () => { return(_navigationTreeController.GetSelectedData <WindowEntityIndex>() != null); }, GetArgumentHandler = () => { WindowEntityIndex windowEntityIndex = _navigationTreeController.GetSelectedData <WindowEntityIndex>(); return(new List <WindowEntity>() { windowEntityIndex.Window }); } }; #endregion }
private void SubscribeEvent() { //订阅数据实体的增删改事件,以更新呈现 SubscriptionToken windowFolderAddedEventToken = _eventAggregator.GetEvent <WindowFolderAddedEvent>().Subscribe((e) => { _navigationTreeController.Add(new FolderEntityIndex(e.Folder), (node) => { if (node.Codon.DataBoundType == typeof(FolderEntityIndex)) { FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem; return(folderEntityIndex.Id == e.Folder.Parent); } else { return(false); } }); //发出添加了文件夹或窗体的事件通知 OnNodeAdded(); }); SubscriptionToken windowFolderRemovedEventToken = _eventAggregator.GetEvent <WindowFolderRemovedEvent>().Subscribe((e) => { _navigationTreeController.Remove( (node) => { if (node.Codon.DataBoundType == typeof(FolderEntityIndex)) { FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem; return(folderEntityIndex.Id == e.Folder.Id); } else { return(false); } }); }); SubscriptionToken windowFolderUpdatedEventToken = _eventAggregator.GetEvent <WindowFolderUpdatedEvent>().Subscribe((e) => { _navigationTreeController.Update((node) => { if (node.Codon.DataBoundType == typeof(FolderEntityIndex)) { FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem; return(folderEntityIndex.Id == e.Folder.Id); } else { return(false); } }); }); SubscriptionToken windowAddedEventToken = _eventAggregator.GetEvent <WindowAddedEvent>().Subscribe((e) => { _navigationTreeController.Add(new WindowEntityIndex(e.Entity), (node) => { if (node.Codon.DataBoundType == typeof(FolderEntityIndex)) { FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem; return(folderEntityIndex.Id == e.Entity.FolderId); } else { return(false); } }); //发出添加了文件夹或窗体的事件通知 OnNodeAdded(); }); SubscriptionToken windowRemovedEventToken = _eventAggregator.GetEvent <WindowRemovedEvent>().Subscribe((e) => { _navigationTreeController.Remove( (node) => { if (node.Codon.DataBoundType == typeof(WindowEntityIndex)) { WindowEntityIndex windowEntityIndex = (WindowEntityIndex)node.DataBoundItem; return(windowEntityIndex.Id == e.Id); } else { return(false); } }); }); SubscriptionToken windowUpdatedEventToken = _eventAggregator.GetEvent <WindowUpdatedEvent>().Subscribe((e) => { _navigationTreeController.Update((node) => { if (node.Codon.DataBoundType == typeof(WindowEntityIndex)) { WindowEntityIndex windowEntityIndex = (WindowEntityIndex)node.DataBoundItem; return(windowEntityIndex.Id == e.Entity.Id); } else { return(false); } }); }); this.Disposed += (sender, e) => { _eventAggregator.GetEvent <WindowFolderAddedEvent>().Unsubscribe(windowFolderAddedEventToken); _eventAggregator.GetEvent <WindowFolderRemovedEvent>().Unsubscribe(windowFolderRemovedEventToken); _eventAggregator.GetEvent <WindowFolderUpdatedEvent>().Unsubscribe(windowFolderUpdatedEventToken); _eventAggregator.GetEvent <WindowAddedEvent>().Unsubscribe(windowAddedEventToken); _eventAggregator.GetEvent <WindowRemovedEvent>().Unsubscribe(windowRemovedEventToken); _eventAggregator.GetEvent <WindowUpdatedEvent>().Unsubscribe(windowUpdatedEventToken); }; }
private void InitController() { _navigationTreeController = new TypeBinderTreeViewController(this.navigationTree); #region ImageList //节点的小图标ImageList ImageList _imageList = new ImageList(); _imageList.Images.Add(IconsLibrary.Folder); //0 _imageList.Images.Add(IconsLibrary.Form); //1 _navigationTreeController.ImageList = _imageList; #endregion #region Codon _navigationTreeController.AddNodeCodon(new TypeBinderTreeViewNodeCodon( typeof(FolderEntityIndex), typeof(WindowEntityIndex), FolderEntityIndex.Property_Name, FolderEntityIndex.Property_Items) { ImageIndex = TreeImages.Folder, ContextMenuStrip = _treeMenuFolder.View //GetItemsFunc = (folderEntity) => //{ // return WindowArchive.Instance.GetIndexList(((FolderEntityIndex)folderEntity).Id); //} }); _navigationTreeController.AddNodeCodon(new TypeBinderTreeViewNodeCodon( typeof(WindowEntityIndex), WindowEntityIndex.Property_Name) { ImageIndex = TreeImages.Form, ContextMenuStrip = _treeMenuWindowEntity.View }); #endregion _navigationTreeController.AfterSelect += new TypeBinderTreeViewController.OnAfterSelectHandler(_navigationTreeController_AfterSelect); #region 处理拖放 navigationTree.AllowDrop = true; navigationTree.CanDropFunc = (dragNode, dropNode) => { //只有在放置节点为目录时,才允许放置 ITypeBinderTreeViewNode binderDropNode = (ITypeBinderTreeViewNode)dropNode; if (binderDropNode.Codon.DataBoundType == typeof(FolderEntityIndex)) { return(true); } else { return(false); } }; navigationTree.DragDropAction = (dragNode, dropNode) => { ITypeBinderTreeViewNode binderDragNode = (ITypeBinderTreeViewNode)dragNode; ITypeBinderTreeViewNode binderDropNode = (ITypeBinderTreeViewNode)dropNode; FolderEntityIndex dropFolder = (FolderEntityIndex)binderDropNode.DataBoundItem; if (binderDragNode.Codon.DataBoundType == typeof(FolderEntityIndex)) { FolderEntityIndex dragFolder = (FolderEntityIndex)binderDragNode.DataBoundItem; _windowArchive.MoveFolder(dragFolder.Id, dropFolder.Id); } else if (binderDragNode.Codon.DataBoundType == typeof(WindowEntityIndex)) { WindowEntityIndex dragWindow = (WindowEntityIndex)binderDragNode.DataBoundItem; _windowArchive.MoveWindow(dragWindow.Id, dropFolder.Id); } else { Debug.Assert(false, "未处理的节点类型"); } binderDragNode.Parent.Items.Remove(binderDragNode.DataBoundItem); binderDropNode.Items.Add(binderDragNode.DataBoundItem); navigationTree.MoveNode(dragNode, dropNode); }; #endregion }