using System; using System.Reflection; using Avalonia.Data; using Avalonia.Data.Core.Plugins; using Serilog; namespace DispenserUI.Utils; public class CustomExceptionValidationPlugin : IDataValidationPlugin { public bool Match(WeakReference reference, string memberName) => true; public IPropertyAccessor Start(WeakReference reference, string name, IPropertyAccessor inner) { return new Validator(reference, name, inner); } private sealed class Validator : DataValidationBase { public Validator(WeakReference reference, string name, IPropertyAccessor inner) : base(inner) { } public override bool SetValue(object? value, BindingPriority priority) { try { return base.SetValue(value, priority); } catch (TargetInvocationException ex) when (ex.InnerException is not null) { Log.Error(ex.InnerException, "TargetInvocationException Exception"); } catch (Exception ex) { Log.Error(ex, "DataValidation Exception"); } return false; } } }