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

Wpf数据注释验证是必需的,当第一次创建文本框时,在键入内容之前,验证不起作用

不能使用基于异常的验证来验证初始源值,因为这需要调用属性setter。但是,您可以使用不同的验证机制,如IDataErrorInfo(实现接口并在绑定上设置ValidatesOnDataErrors=True)。此机制允许对初始源值进行验证。

如果你的应用程序需要.NET 4.5,那么你也可以使用INotifyDataErrorInfo(在绑定中使用ValidatesOnNotifyDataErrors=True)。