我是 WPF 新手,我创建了一个文本框很少的应用程序。文本框使用 MVVM 绑定(bind)到某些源。现在,当我单击保存按钮时,它应该对所有空文本框进行验证,并且不应触发保存事件。如何在 WPF 中实现这一点。
我已经写了验证器,但它没有被调用。请参阅下面的代码:
<TextBox Width="250" Grid.Row="0" Grid.Column="1" Margin="10">
<TextBox.Text>
<Binding Path="ContinuousModel.FileName" ValidatesOnDataErrors="True" NotifyOnValidationError="True" Mode="TwoWay" ValidatesOnExceptions="True">
<Binding.ValidationRules>
<validate:RequiredFieldValidatation />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
public class RequiredFieldValidatation:ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value == null || value.ToString() == string.Empty)
return new ValidationResult(false, "Value cannot be empty");
return ValidationResult.ValidResult;
}
}
仅当写入某些文本然后更改焦点然后返回并删除值然后更改焦点时才会调用上述验证器。
注意 :使用 MVVM 和数据模板,我正在加载各种用户控件,并且这些控件绑定(bind)到 viewmodel。保存按钮位于不同的用户控件中,因此我无法在保存按钮单击事件时手动验证所有文本框。
最佳答案
将 UpdateSourceTrigger 属性添加到您的绑定(bind)中;
<Binding Path="ContinuousModel.FileName" UpdateSourceTrigger=PropertyChanged ValidatesOnDataErrors="True" NotifyOnValidationError="True" Mode="TwoWay" ValidatesOnExceptions="True">
<Binding.ValidationRules>
<validate:RequiredFieldValidatation />
</Binding.ValidationRules>
</Binding>
关于wpf - 如何正确实现文本框验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30319264/