Wpf数据注释验证是必需的,当第一次创建文本框时,在键入内容之前,验证不起作用
本文关键字:验证 不起作用 创建 注释 数据 Wpf 第一次 文本 | 更新日期: 2023-09-27 18:29:00
我在我的wpf-xaml项目中使用ValidationContext进行验证,然后它会查找数据注释。这一切都很好,我得到了一个文本块周围的红色框和一个样式的工具提示。然而,有两件事我无法解决,当用户打开一个具有必需字段的视图时,我希望该texblock立即有一个红色框。我没有得到它,而是在输入后,将一些文本删除到绑定到必需的texbox中。如何使其在启动时得到验证?这里有一些代码:
protected void ValidateProperty(object value, [CallerMemberName] string propertyName = "")
{
var context = new ValidationContext(this, null, null) {MemberName = propertyName};
Validator.ValidateProperty(value, context);
}
[Required(ErrorMessage = ErrorMessages.DescriptionRequired)]
[StringLength(60, ErrorMessage = ErrorMessages.DescriptionLength60)]
public string Description
{
get { return description; }
set
{
description = value;
ValidateProperty(value);
OnPropertyChanged();
}
}
<TextBox x:Name="DescriptionTextBox"
Text="{Binding SelectedEntity.Description,
ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}"/>
因此,我希望DescriptionTextBox默认为红色,因为当用户创建新的描述时,文本框是空的。
我的第二个问题是关于数据注释。我可以将DescriptionTextBox的长度设置为数据注释中字符串的长度吗?
向致以诚挚的问候
Daniel
不能使用基于异常的验证来验证初始源值,因为这需要调用属性setter。但是,您可以使用不同的验证机制,如IDataErrorInfo
(实现接口并在绑定上设置ValidatesOnDataErrors=True
)。此机制允许对初始源值进行验证。
如果你的应用程序需要.NET 4.5,那么你也可以使用INotifyDataErrorInfo
(在绑定中使用ValidatesOnNotifyDataErrors=True
)。