我看到:禁用保存按鈕,如果驗證結果是假的,通過使用自定義有效性規則
Using WPF Validation rules and disabling a 'Save' button
兩個提出的解決方案使用IDataErrorInfo 或通過 Validation.AddErrorHandler()
附加處理程序Validation.ErrorEvent
。 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}"/>
那麼,有沒有一個「MVVM」的方式來改變SaveAddCommand
的CanExecute
當文本框驗證規則返回false,而不需要將代碼中的依賴對象提供給AddHandler
?