如何根据另一个字段的值使字段为必填字段

时间:2018-10-30 21:07:50

标签: c# wpf validation mvvm data-annotations

我有一个ViewModel,其中包含一些带有数据注释的公共属性,如下所示:

[Required]
public string PointOfContact { get; set; }

哪个工作正常。我已经准备好所有必要的管道,以在验证失败时显示正确的控件格式和错误消息。

但是,根据复选框的值,我有一些有条件必填字段。例如:

public bool Briefing { get; set; }
public DateTime BriefingTime { get; set; }

在这种情况下,仅当选中了绑定到Briefing属性的复选框时,我才希望需要BriefingTime。 BriefingTime的可见性已经绑定到Briefing,因此我需要做的就是在选中复选框时使其具有通常的Required行为。

是否有一种现成的方法可以执行此操作,还是需要编写自己的数据注释类?这样的课程是什么样的?

1 个答案:

答案 0 :(得分:2)

您可以编写自己的自定义ValidationAttribute

public class BriefingTimeRequiredAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var model = (MyModel)validationContext.ObjectInstance;
        if (model.Briefing && !model.BriefingTime.HasValue)
        {
            return new ValidationResult("BriefingTime is required.");
        }
        return ValidationResult.Success;
    }
}