ValidationChecker
类,该类将使用检查是否存在验证错误
IsValid
方法
public class ValidationChecker : Freezable
{
public static List<DependencyObject> elements = new List<DependencyObject>();
public static int GetValidationObject(DependencyObject obj)
{
return (int)obj.GetValue(ValidationObjectProperty);
}
public static void SetValidationObject(DependencyObject obj, int value)
{
obj.SetValue(ValidationObjectProperty, value);
}
// Using a DependencyProperty as the backing store for ErrorCount. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ValidationObjectProperty =
DependencyProperty.RegisterAttached("ValidationObject", typeof(DependencyObject), typeof(ValidationChecker), new PropertyMetadata(null, OnValueChanged));
public static bool IsValid()
{
foreach (var item in elements)
{
if (Validation.GetHasError(item)) return false;
}
return true;
}
private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
elements.Add(d);
}
protected override Freezable CreateInstanceCore()
{
return new ValidationChecker();
}
}
ValidationObject
<DataTemplate>
<TextBox local:ValidationChecker.ValidationObject="{Binding RelativeSource={RelativeSource Self}}">
<TextBox.Text>
<Binding Path="Value">
<Binding.ValidationRules>
<local:NotEmptyValidationRule ValidatesOnTargetUpdated="True"></local:NotEmptyValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</DataTemplate>
您已经提到您的
Button
已绑定到
Command
. 所以实施
CanExecute
方法
ValidationChecker.Isvalid()
. 别忘了调用
RaiseCanExecute
此方法
命令
只要你需要。