瀏覽代碼

Improved DynamicTreeGrid support

frogsoftware 1 年之前
父節點
當前提交
7b104ef5d1
共有 2 個文件被更改,包括 43 次插入12 次删除
  1. 9 3
      InABox.Core/CoreTreeNodes.cs
  2. 34 9
      inabox.wpf/DynamicGrid/DynamicTreeView.cs

+ 9 - 3
InABox.Core/CoreTreeNodes.cs

@@ -127,14 +127,20 @@ namespace InABox.Core
         
         public CoreTreeNode Find(Guid id) => _nodes.FirstOrDefault(x => x.ID == id);
 
-        public void GetChildren(List<Guid> nodes, Guid id)
+        public void GetThisAndAllChildren(List<Guid> nodes, Guid id)
         {
             nodes.Add(id);
             var children = GetChilden(id);
             foreach (var child in children)
-                GetChildren(nodes, child.ID);
+                GetThisAndAllChildren(nodes, child.ID);
+        }
+
+        public List<Guid> GetThisAndAllChildren(Guid id)
+        {
+            var result = new List<Guid>();
+            GetThisAndAllChildren(result,id);
+            return result;
         }
-        
         public ObservableCollection<CoreTreeNode> GetChilden(Guid id)
         {
             

+ 34 - 9
inabox.wpf/DynamicGrid/DynamicTreeView.cs

@@ -31,6 +31,13 @@ namespace InABox.DynamicGrid
         None
     }
 
+    public enum DynamicTreeGridExpandMode
+    {
+        All,
+        Root,
+        None
+    }
+
     public delegate void OnSelectItem(CoreTreeNode node);
 
     public delegate void OnContextMenuOpening(CoreTreeNode node, ContextMenu menu);
@@ -106,6 +113,30 @@ namespace InABox.DynamicGrid
                 };
             }
         } 
+        
+        public DynamicTreeGridExpandMode ExpandMode
+        {
+            get
+            {
+                return _tree.AutoExpandMode switch
+                {
+                    AutoExpandMode.AllNodesExpanded => DynamicTreeGridExpandMode.All,
+                    AutoExpandMode.RootNodesExpanded => DynamicTreeGridExpandMode.Root,
+                    _ => DynamicTreeGridExpandMode.None
+                };
+            }
+            set
+            {
+                _tree.AutoExpandMode = value switch
+                {
+                    DynamicTreeGridExpandMode.All => AutoExpandMode.AllNodesExpanded,
+                    DynamicTreeGridExpandMode.Root => AutoExpandMode.RootNodesExpanded,
+                    _ => AutoExpandMode.None
+                };
+            }
+        } 
+        
+        public Guid SelectedID => (_tree?.SelectedItem as CoreTreeNode)?.ID ?? Guid.Empty;
 
         /*public double RowHeight
         {
@@ -128,11 +159,11 @@ namespace InABox.DynamicGrid
             _tree.ChildPropertyName = "Children";
             //_tree.ParentPropertyName = "Parent";
             _tree.AutoGenerateColumns = false;
-            _tree.AutoExpandMode = AutoExpandMode.AllNodesExpanded;
             //_tree.NodeCollapsing += (o, e) => { e.Cancel = true; };
             _tree.HeaderRowHeight = 0D;
             _tree.SelectionChanged += (o,e) => OnSelectItem?.Invoke((_tree.SelectedItem as CoreTreeNode)!);
             _tree.AllowSelectionOnExpanderClick = false;
+            ExpandMode = DynamicTreeGridExpandMode.All;
 
             _menu = new ContextMenu();
             var additem = new MenuItem() { Header = "Add Child Folder" };
@@ -304,14 +335,8 @@ namespace InABox.DynamicGrid
 
         protected virtual bool DoEditItem(T item)
         {
-            var form = new DynamicEditorForm(typeof(T));
-            form.OnEditorValueChanged += (sender, name, value) =>
-            {
-                CoreUtils.SetPropertyValue(item, name, value);
-                return new Dictionary<string, object?>();
-            };
-            form.Items = new T[] { item };
-            return form.ShowDialog() == true;
+            var grid = DynamicGridUtils.CreateDynamicGrid<T>(typeof(DynamicItemsListGrid<>));
+            return grid.EditItems(new T[] { item });
         }
 
         protected abstract void DoSaveItem(T item);