浏览代码

Merge branch 'kenric' into frank

frankvandenbos 7 月之前
父节点
当前提交
9efb10ad1a

+ 7 - 4
inabox.wpf/DynamicGrid/DynamicEditorGrid.xaml.cs

@@ -381,6 +381,8 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
             {
                 editor.Configure();
                 editor.Loaded = true;
+
+                editor.OnEditorValueChanged += EditorValueChanged;
             }
         }
 
@@ -465,9 +467,12 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
 
                 var bLoaded = editor.Loaded;
                 editor.Loaded = false;
-                if (changededitors != null && changededitors.ContainsKey(columnname))
+                if (changededitors != null)
                 {
-                    editor.SetValue(columnname, changededitors[columnname]);
+                    if (changededitors.TryGetValue(columnname, out var value))
+                    {
+                        editor.SetValue(columnname, value);
+                    }
                 }
                 else
                 {
@@ -486,8 +491,6 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
                 }
 
                 editor.Loaded = bLoaded;
-
-                editor.OnEditorValueChanged += EditorValueChanged;
             }
         }
 

+ 14 - 36
inabox.wpf/DynamicGrid/DynamicGridFilterGrid.cs

@@ -2,6 +2,7 @@
 using InABox.Wpf;
 using System;
 using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using System.Text;
 using System.Threading;
@@ -9,9 +10,20 @@ using System.Threading.Tasks;
 
 namespace InABox.DynamicGrid
 {
-    public class DynamicGridFilterGrid : DynamicGrid<CoreFilterDefinition>
+    public class DynamicGridFilterGrid : DynamicItemsListGrid<CoreFilterDefinition>
     {
-        public CoreFilterDefinitions Filters;
+        private CoreFilterDefinitions _filters;
+        public CoreFilterDefinitions Filters
+        {
+            get => _filters;
+            [MemberNotNull(nameof(_filters))]
+            set
+            {
+                _filters = value;
+                Items = value;
+            }
+        }
+
         private Type FilterType;
 
         public DynamicGridFilterGrid(Type filterType)
@@ -42,39 +54,5 @@ namespace InABox.DynamicGrid
                 filterEditor.Type = FilterType;
             }
         }
-
-        public override void DeleteItems(params CoreRow[] rows)
-        {
-            foreach (var row in rows.OrderByDescending(x => x.Index))
-                Filters.RemoveAt(row.Index);
-        }
-
-        public override CoreFilterDefinition LoadItem(CoreRow row)
-        {
-            var index = Data.Rows.IndexOf(row);
-            return Filters[index];
-        }
-
-        protected override void Reload(
-            Filters<CoreFilterDefinition> criteria, Columns<CoreFilterDefinition> columns, ref SortOrder<CoreFilterDefinition>? sort, 
-            CancellationToken token, Action<CoreTable?, Exception?> action)
-        {
-            var result = new CoreTable();
-            if (columns == null || columns.Count == 0)
-                result.LoadColumns(typeof(CoreFilterDefinition));
-            else
-                result.LoadColumns(columns);
-            result.LoadRows(Filters);
-            action.Invoke(result, null);
-        }
-
-        public override void SaveItem(CoreFilterDefinition item)
-        {
-            if (!Filters.Contains(item))
-            {
-                Filters.Add(item);
-            }
-            Filters.Sort((x, y) => x.Sequence.CompareTo(y.Sequence));
-        }
     }
 }

+ 14 - 0
inabox.wpf/DynamicGrid/DynamicItemsListGrid.cs

@@ -79,6 +79,20 @@ public class DynamicItemsListGrid<T> : DynamicGrid<T>, IDynamicItemsListGrid
         {
             Items.Add(item);
         }
+        if (item is ISequenceable)
+        {
+            Items.Sort((a, b) => (a as ISequenceable)!.Sequence.CompareTo((b as ISequenceable)!.Sequence));
+        }
     }
 
+    protected override bool BeforeCopy(IList<T> items)
+    {
+        if (!base.BeforeCopy(items)) return false;
+
+        for(int i = 0; i < items.Count; ++i)
+        {
+            items[i] = items[i].Clone();
+        }
+        return true;
+    }
 }