数据有效时,业务规则错误不会消失

时间:2018-11-03 22:29:24

标签: wpf validation catel

我正在使用Orc.FluentValidation,并且有:

[ValidatorDescription(nameof(Customer), ValidationResultType.Error,
    Orc.FluentValidation.ValidationType.BusinessRule)]
public class CustomerBusinessRuleValidator : AbstractValidator<Customer>
{
    public CustomerBusinessRuleValidator()
    {
        RuleFor(x => x.Addresses).Must(x => x != null && x.Count > 0 && x.Any(add => add.IsCurrent))
            .WithMessage("Customer object is required to have at least 1 current address.");
    }
}

CustomerAddress

public class CustomerAddress : Entity
{
    [DomainSignature] public Address Address { get; set; }

    [DomainSignature] public Lookup AddressType { get; set; }

    [DomainSignature] public bool IsCurrent { get; set; }


}

Customer

public class Customer : Entity
{
    [DomainSignature]
    public string Code { get; set; }

    public Gender Gender { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string MiddleName { get; set; }

    public DateTime DateOfBirth { get; set; }
    public Lookup PlaceOfBirth { get; set; }

    public string PhoneNumber { get; set; }
    public string Email { get; set; }

    public ICollection<CustomerAddress> Addresses { get; set; }

    public Lookup Occupation { get; set; }

    public IdDocument Id1 { get; set; }

    public IdDocument Id2 { get; set; }

}

即使在为CustomerAddress添加了IsCurrent = trueCustomer的{​​{1}}的视图上,消息仍然显示。另外,我不确定为什么某些绑定到字段的控件会显示错误,而另一些则不是_this不是字段验证规则。

在将CustomerAddress添加到Addresses集合之后,是否有方法要调用?

i.imgur.com/eecAFuJ.png

1 个答案:

答案 0 :(得分:0)

请确保引发整个集合的更改属性以进行错误验证(例如RaisePropertyChanged(nameof(MyCollection))),否则UI无法更新验证结果。

  

此外,我不确定为什么某些绑定到字段的控件会显示错误并   其他人不是_这不是字段验证规则。

这可能是 ,因为您使用的是默认样式。对于大多数控件,Orchestra创建一个错误模板(装饰器),但并非每个控件都具有此模板。上周我们一直在努力添加这些内容,因此我建议尝试使用Orchestra和Orc.Controls的最新Alpha版。

还要确保在绑定上设置ValidateOnDataErrorsNotifyOnValidationErrors以便在用户界面中显示验证。