Dispenser/DispenserUI/Utils/CustomExceptionValidationPl...

43 lines
1.2 KiB
C#

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<object?> reference, string memberName) => true;
public IPropertyAccessor Start(WeakReference<object?> reference, string name, IPropertyAccessor inner)
{
return new Validator(reference, name, inner);
}
private sealed class Validator : DataValidationBase
{
public Validator(WeakReference<object?> 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;
}
}
}