使用INotifyDataErrorInfo通过父视图模型进行WPF Datagrid验证

时间:2018-11-06 20:06:56

标签: c# wpf wpfdatagrid fluentvalidation

比方说我的viewmodel类是这样的

public class MainWindowViewModel : ValidatableBindableBase
{
   public ObservableCollection<Employee> Employees { get; set; } = new 
                                            ObservableCollection<Employee>();
}

Employee类所在的地方

public class Employee : ValidatableBindableBase
{
        private string _name;
        public string Name
        {
            get => _name;
            set
            {
                SetProperty(ref _name, value);
            }
        }

        private int _age;
        public int Age
        {
            get => _age;
            set => SetProperty(ref _age, value);
        }
}

主视图包含一个绑定到可观察集合的数据网格。现在,我正在使用FluentValidatin执行验证逻辑,我有两个选择:1)在员工类级别上进行验证,或2)在Mainwindow类级别上进行验证。如果我们选择第二个选项,则验证将如下所示:

internal class EmployeeValidation : AbstractValidator<Employee>
{
    public EmployeeValidation()
    {
        RuleFor(e => e.Age).ExclusiveBetween(10, 50);
    }
}

internal class MainWindowValidation : AbstractValidator<MainWindowViewModel>
{
    public MainWindowValidation()
    {
        RuleForEach(x => x.Employees).SetValidator(new EmployeeValidation());
    }
}

现在,问题是验证结果显示属性名称为“ Employees [0] .Age”,这显然不适用于数据网格绑定。我知道,如果我在Employee类级别上运行验证,则属性名称将为“ Age”,并且INotifyDataErrorInfo可以正常工作。但是,我更喜欢使用父视图模型(即MainWindow),是否可以解决属性名称问题?

0 个答案:

没有答案