ant-design-blazor/components/form/Form.razor.cs
笨木头 7d9d6fc89d fix(module: form): value not change when model change (#333)
* feat(module: datepicker): support nullable type

* fix(module: cascader): displaytext did not change when bind-value change

* fix(module: form): can not change layout

* docs(module: form): add 'new model' test button

Co-authored-by: James Yeung <shunjiey@hotmail.com>
2020-07-11 23:03:13 +08:00

101 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using AntDesign.Forms;
using AntDesign.Internal;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
namespace AntDesign
{
public partial class Form<TModel> : AntDomComponentBase, IForm
{
private readonly string _prefixCls = "ant-form";
[Parameter]
public string Layout { get; set; } = FormLayout.Horizontal;
[Parameter]
public RenderFragment<TModel> ChildContent { get; set; }
[Parameter]
public ColLayoutParam LabelCol { get; set; }
[Parameter]
public ColLayoutParam WrapperCol { get; set; }
[Parameter]
public string Size { get; set; }
[Parameter]
public TModel Model { get; set; }
[Parameter]
public bool Loading { get; set; }
[Parameter]
public EventCallback<EditContext> OnFinish { get; set; }
[Parameter]
public EventCallback<EditContext> OnFinishFailed { get; set; }
private EditContext _editContext;
private IList<IFormItem> _formItems = new List<IFormItem>();
private IList<IControlValueAccessor> _controls = new List<IControlValueAccessor>();
ColLayoutParam IForm.WrapperCol => WrapperCol;
ColLayoutParam IForm.LabelCol => LabelCol;
EditContext IForm.EditContext => _editContext;
string IForm.Size => Size;
protected override void OnInitialized()
{
base.OnInitialized();
SetClass();
_editContext = new EditContext(Model);
}
protected override void OnParametersSet()
{
base.OnParametersSet();
SetClass();
}
protected void SetClass()
{
this.ClassMapper.Clear()
.Add(_prefixCls)
.Add($"{_prefixCls}-{Layout.ToLower()}")
;
}
public void HandleValidSubmit()
{
}
public void Reset()
{
_controls.ForEach(item => item.Reset());
}
void IForm.AddFormItem(IFormItem formItem)
{
_formItems.Add(formItem);
}
void IForm.AddControl(IControlValueAccessor valueAccessor)
{
this._controls.Add(valueAccessor);
}
public bool Validate()
{
return _editContext.Validate();
}
}
}