@typeparam TItem where TItem : class @using System.Linq.Expressions @using System.Reflection @using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers @typeparam TMember where TMember : struct, Enum @foreach (var value in enumValues) { }
@code { [Parameter, EditorRequired] public TItem Model { get; set; } = default!; [Parameter, EditorRequired] public Expression> EnumProperty { get; set; } = null!; [Parameter] public Action? OnChanged { get; set; } private Dictionary enumValues = new(); private PropertyInfo modelMemberInfo = null!; private TMember selected; protected override void OnInitialized() { var modelMemberName = ((MemberExpression)EnumProperty.Body).Member.Name; modelMemberInfo = typeof(TItem).GetProperty(modelMemberName)!; foreach (var value in Enum.GetValues()) { enumValues.Add(value, value.GetDisplayName()); } } protected override void OnAfterRender(bool firstRender) { var current = (TMember)modelMemberInfo.GetValue(Model)!; if (!current.Equals(selected)) { OnValueChanged(); } } private void OnValueChanged() { modelMemberInfo.SetValue(Model, selected); OnChanged?.Invoke(); } }