Files
Shrlalgo.RvKits/ShrlAlgo.Toolkit.Mvvm/Behaviors/ValidationRuleBehavior.cs

45 lines
1.1 KiB
C#
Raw Normal View History

using System.Windows;
2024-09-22 11:05:41 +08:00
using System.Windows.Controls;
using Microsoft.Xaml.Behaviors;
2024-09-22 11:05:41 +08:00
namespace ShrlAlgo.Toolkit.Mvvm.Behaviors;
2024-09-22 11:05:41 +08:00
/// <summary>
/// 在xaml的资源中声明viewModel继承IValidationExceptionHandler通过IsValid判断能否执行
/// </summary>
public class ValidationRuleBehavior : Behavior<FrameworkElement>
{
private int errorCount;
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.AddHandler(Validation.ErrorEvent, new EventHandler<ValidationErrorEventArgs>(OnValidationError));
}
protected override void OnDetaching()
{
AssociatedObject.RemoveHandler(Validation.ErrorEvent, new EventHandler<ValidationErrorEventArgs>(OnValidationError));
}
private void OnValidationError(object sender, ValidationErrorEventArgs e)
{
if (AssociatedObject.DataContext is IValidationExceptionHandler handler)
{
if (e.OriginalSource is UIElement elem)
{
if (e.Action == ValidationErrorEventAction.Added)
{
errorCount++;
}
else if (e.Action == ValidationErrorEventAction.Removed)
{
errorCount--;
}
}
handler.IsValid = errorCount == 0;
}
}
}