예제 #1
0
        public override async void Save()
        {
            if (!FormAdapter.IsDirty && !HasDirtyChildren && LaunchArgs.LaunchType == LaunchTypes.Edit)
            {
                await ViewModelNavigation.GoBackAsync();
            }
            else if (FormAdapter.Validate())
            {
                ViewToModel(FormAdapter, Model);
                if (Model is IValidateable)
                {
                    var result = Validator.Validate(Model as IValidateable);
                    if (!result.Successful)
                    {
                        await ShowValidationErrorsAsync(result);

                        return;
                    }
                }

                var saveResult = await SaveRecordAsync();

                if (saveResult.Successful)
                {
                    //See notes on this method we allow the view model to override what happens when the record is saved.
                    HasDirtyChildren = false;
                    NotifyParentChildDirty();

                    await PostSaveAsync();
                }
            }
        }
예제 #2
0
        public bool ViewToModel(EditFormAdapter form, TModel model)
        {
            var modelProperties = typeof(TModel).GetTypeInfo().DeclaredProperties;

            if (!form.Validate())
            {
                return(false);
            }

            foreach (var formItem in FormAdapter.FormItems)
            {
                var prop = modelProperties.Where(prp => prp.Name.ToLower() == formItem.Name.ToLower()).FirstOrDefault();
                switch (formItem.FieldType)
                {
                case FormField.FeildType_EntityHeaderPicker:
                    break;

                case FormField.FieldType_CheckBox:
                    if (bool.TryParse(formItem.Value, out bool result))
                    {
                        prop.SetValue(model, result);
                    }
                    break;

                case FormField.FieldType_Picker:
                    if (String.IsNullOrEmpty(formItem.Value))
                    {
                        prop.SetValue(model, null);
                    }
                    else
                    {
                        if (prop.PropertyType == typeof(String))
                        {
                            prop.SetValue(model, formItem.Options.Where(opt => opt.Key == formItem.Value).First().Key);
                        }
                        else
                        {
                            var eh = Activator.CreateInstance(prop.PropertyType) as EntityHeader;
                            eh.Id   = formItem.Value;
                            eh.Text = formItem.Options.Where(opt => opt.Key == formItem.Value).First().Label;
                            prop.SetValue(model, eh);
                        }
                    }
                    break;

                case FormField.FieldType_Integer:
                    if (!String.IsNullOrEmpty(formItem.Value))
                    {
                        if (int.TryParse(formItem.Value, out int intValue))
                        {
                            prop.SetValue(model, intValue);
                        }
                    }

                    break;

                case FormField.FieldType_Decimal:
                    if (!String.IsNullOrEmpty(formItem.Value))
                    {
                        if (double.TryParse(formItem.Value, out double intValue))
                        {
                            prop.SetValue(model, intValue);
                        }
                    }

                    break;

                case FormField.FieldType_NameSpace:
                case FormField.FieldType_MultilineText:
                case FormField.FieldType_Text:
                case FormField.FieldType_Key:
                    prop.SetValue(model, formItem.Value);
                    break;

                case FormField.FieldType_Password:
                    if (!String.IsNullOrEmpty(formItem.Value))
                    {
                        prop.SetValue(model, formItem.Value);
                    }
                    break;
                }
            }

            return(true);
        }