Merge pull request #482 from irihitech/form

Form Dynamic Generation
This commit is contained in:
Zhang Dian
2024-11-15 23:15:24 +08:00
committed by GitHub
11 changed files with 420 additions and 13 deletions

View File

@@ -1,6 +1,8 @@
using System;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
using CommunityToolkit.Mvvm.ComponentModel;
using Irihi.Avalonia.Shared.Contracts;
namespace Ursa.Demo.ViewModels;
@@ -11,13 +13,48 @@ public partial class FormDemoViewModel : ObservableObject
public FormDemoViewModel()
{
Model = new DataModel();
FormGroups = new ObservableCollection<IFormElement>
{
new FormGroupViewModel
{
Title = "Basic Information",
Items = new ObservableCollection<IFromItemViewModel>
{
new FormTextViewModel { Label = "Name" },
new FormAgeViewModel { Label = "Age" },
new FormTextViewModel { Label = "Email" }
}
},
new FormGroupViewModel
{
Title = "Education Information",
Items = new ObservableCollection<IFromItemViewModel>
{
new FormTextViewModel { Label = "College" },
new FormDateRangeViewModel { Label = "Study Time" }
}
},
new FormTextViewModel(){ Label = "Other" }
};
}
public ObservableCollection<IFormElement> FormGroups { get; set; }
}
public partial class DataModel : ObservableObject
public class DataModel : ObservableObject
{
private DateTime _date;
private string _email = string.Empty;
private string _name = string.Empty;
private double _number;
public DataModel()
{
Date = DateTime.Today;
}
[MinLength(10)]
public string Name
{
@@ -25,8 +62,6 @@ public partial class DataModel : ObservableObject
set => SetProperty(ref _name, value);
}
private double _number;
[Range(0.0, 10.0)]
public double Number
{
@@ -34,8 +69,6 @@ public partial class DataModel : ObservableObject
set => SetProperty(ref _number, value);
}
private string _email = string.Empty;
[EmailAddress]
public string Email
{
@@ -43,16 +76,50 @@ public partial class DataModel : ObservableObject
set => SetProperty(ref _email, value);
}
private DateTime _date;
public DateTime Date
{
get => _date;
set => SetProperty(ref _date, value);
}
}
public DataModel()
{
Date = DateTime.Today;
}
public interface IFormElement
{
}
public interface IFormGroupViewModel : IFormGroup, IFormElement
{
public string? Title { get; set; }
public ObservableCollection<IFromItemViewModel> Items { get; set; }
}
public interface IFromItemViewModel: IFormElement
{
public string? Label { get; set; }
}
public partial class FormGroupViewModel : ObservableObject, IFormGroupViewModel
{
[ObservableProperty] private string? _title;
public ObservableCollection<IFromItemViewModel> Items { get; set; } = [];
}
public partial class FormTextViewModel : ObservableObject, IFromItemViewModel
{
[ObservableProperty] private string? _label;
[ObservableProperty] private string? _value;
}
public partial class FormAgeViewModel : ObservableObject, IFromItemViewModel
{
[ObservableProperty] private uint? _age;
[ObservableProperty] private string? _label;
}
public partial class FormDateRangeViewModel : ObservableObject, IFromItemViewModel
{
[ObservableProperty] private DateTime? _end;
[ObservableProperty] private string? _label;
[ObservableProperty] private DateTime? _start;
}