【发布时间】:2015-10-22 08:39:51
【问题描述】:
我看到了:
Using WPF Validation rules and disabling a 'Save' button
两个建议的解决方案使用IDataErrorInfo
或通过将处理程序附加到Validation.ErrorEvent
Validation.AddErrorHandler()。 AddErrorHandler 有两个参数,依赖对象和处理程序。由于我在 ViewModel 中执行此操作,并且没有参考 DO,我如何通过使用我的自定义规则进行验证来实现这一点。
验证规则:
public class NameValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (string.IsNullOrWhiteSpace(((string)value)))
{
return new ValidationResult(false, "Must not be empty");
}
return new ValidationResult(true, null);
}
}
以及使用它的控件:
<TextBox>
<TextBox.Text>
<Binding Path="Customer.FirstName" UpdateSourceTrigger="LostFocus" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<validators:NameValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Button Content="Save" Command="{Binding SaveAddCommand}" CommandParameter="{Binding Customer}"/>
那么,当文本框验证规则返回 false 时,是否有一种“MVVM”方法可以更改 SaveAddCommand 的 CanExecute,而无需在 AddHandler 的代码中提供依赖对象?
【问题讨论】:
标签: c# wpf validation xaml mvvm