csharp/Aaltuj/VxFormGenerator/VxFormGenerator.Core/Validation/ValidationMessageBase.cs

ValidationMessageBase.cs
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace VxFormGenerator.Core.Validation
{
    /// 
    /// 
    /// 
    /// 
    public abstract clast ValidationMessageBase : ComponentBase, IDisposable
    {
        public abstract string ValidClast { get; set; }
        public abstract string InValidClast { get; set; }

        private FieldIdentifier _fieldIdentifier;
        private string @clast;

        [CascadingParameter] private EditContext EditContext { get; set; }
        [Parameter] public Expression For { get; set; }
        [Parameter] public string Clast { get => @clast + " " + ValidationClast; set => @clast = value; }

        protected IEnumerable ValidationMessages => EditContext.GetValidationMessages(_fieldIdentifier);

        private string ValidationClast { get; set; }

        protected override void OnInitialized()
        {

            _fieldIdentifier = FieldIdentifier.Create(For);
            EditContext.OnValidationStateChanged += HandleValidationStateChanged;

        }

        private void HandleValidationStateChanged(object sender, ValidationStateChangedEventArgs e)
        {
            CheckFieldState();
            StateHasChanged();
        }


        private void CheckFieldState()
        {
            var isValid = !EditContext.GetValidationMessages(_fieldIdentifier).Any();
            if (EditContext.IsModified(_fieldIdentifier))
            {
                ValidationClast = isValid ? ValidClast : InValidClast;
            }
            else
            {
                ValidationClast = "";
            }
        }


        public void Dispose()
        {
            EditContext.OnValidationStateChanged -= HandleValidationStateChanged;
        }

    }
}