Pārlūkot izejas kodu

Initializing fields to the Entity Values when loading initially a digital form

Kenric Nugteren 8 mēneši atpakaļ
vecāks
revīzija
628f41e644

+ 2 - 3
inabox.wpf/DigitalForms/Designer/DynamicEditFormWindow.xaml.cs

@@ -399,9 +399,8 @@ public partial class DynamicFormEditWindow : Window, IDynamicFormWindow
         }
 
         form.Initialize();
-
-        if (values is not null)
-            form.LoadValues(values);
+        
+        form.LoadValues(values ?? new DFLoadStorage());
 
         customise?.Invoke(form);
 

+ 21 - 2
inabox.wpf/DigitalForms/Designer/DynamicFormDesignGrid.cs

@@ -2161,8 +2161,6 @@ namespace InABox.DynamicGrid
             var field = form.Elements.FirstOrDefault(x => string.Equals(fieldName, (x as DFLayoutField)?.Name)) as DFLayoutField;
             if (field != null)
             {
-                //value = field.ParseValue(value);
-
                 var fieldControl = GetFieldControl(field);
                 if (fieldControl != null)
                 {
@@ -2231,6 +2229,7 @@ namespace InABox.DynamicGrid
         public void LoadValues(DFLoadStorage values)
         {
             _changing = true;
+            InitializeEntityValues();
             foreach (var (key, value) in values.Items())
             {
                 if (!key.Contains('.'))
@@ -2243,6 +2242,26 @@ namespace InABox.DynamicGrid
             _isChanged = false;
         }
 
+        public void InitializeEntityValues()
+        {
+            _changing = true;
+            foreach (var field in form.Elements.OfType<DFLayoutField>())
+            {
+                var property = DataModel != null ? field.GetPropertyValue<string>("Property") : null;
+                if (!property.IsNullOrWhiteSpace())
+                {
+                    var fieldControl = GetFieldControl(field);
+                    if(fieldControl != null)
+                    {
+                        fieldControl.SetValue(DataModel!.GetEntityValue(property));
+                    }
+                }
+            }
+            Form.EvaluateExpressions();
+            _changing = false;
+            _isChanged = false;
+        }
+
         /// <summary>
         /// Takes values from editors and saves them to a dictionary; must be called after <see cref="Initialize"/>.
         /// </summary>