更新整理
This commit is contained in:
44
ShrlAlgoToolkit.Mvvm/Behaviors/ValidationRuleBehavior.cs
Normal file
44
ShrlAlgoToolkit.Mvvm/Behaviors/ValidationRuleBehavior.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using Microsoft.Xaml.Behaviors;
|
||||
|
||||
namespace ShrlAlgoToolkit.Mvvm.Behaviors;
|
||||
|
||||
/// <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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user