【发布时间】:2021-02-04 19:25:17
【问题描述】:
认为我的绑定在某处关闭,我想将验证错误显示为数据网格中的工具提示。我会很感激有人就如何实现这一点提出建议或指出我的错误
我的简单测试模型:
public class TimeSheets
{
public int Id { get; set; }
public double MondayTime { get; set; }
}
观点:
public class TimeSheets
{
public int Id { get; set; }
public double MondayTime { get; set; }
}
视图模型:
public class DataGridViewModel : Screen, IDataErrorInfo
{
private BindableCollection<TimeSheets> _times = new BindableCollection<TimeSheets>();
private readonly DataGridViewModelValidator _dgVal;
public BindableCollection<TimeSheets> Times
{
get { return _times; }
set { _times = value;
NotifyOfPropertyChange(() => Times);
}
}
public DataGridViewModel()
{
Times.Add(new TimeSheets { Id = 1, MondayTime = 3.5 });
_dgVal = new DataGridViewModelValidator();
}
public string this[string columnName]
{
get
{
var firstOrDefault =_dgVal.Validate(this).Errors.FirstOrDefault(lol => lol.PropertyName == columnName);
if (firstOrDefault != null)
return _dgVal != null ? firstOrDefault.ErrorMessage : "";
return "";
}
}
public string Error
{
get
{
if (_dgVal != null)
{
FluentValidation.Results.ValidationResult results = _dgVal.Validate(this);
if (results != null && results.Errors.Any())
{
string errors = string.Join(Environment.NewLine, results.Errors.Select(x => x.ErrorMessage).ToArray());
return errors;
}
}
return string.Empty;
}
}
}
类模型验证:
public class TimeSheetValidator:AbstractValidator<TimeSheets>
{
public TimeSheetValidator()
{
RuleFor(x => x.Id)
.Empty()
.WithMessage("Empty ID");
RuleFor(x => x.MondayTime)
.Empty()
.WithMessage("Time Empty");
RuleFor(x => x.MondayTime)
.Equal(3.5)
.WithMessage("Valildation");
}
}
来自 Viewmodel 的 ListValidation:
enter cod public class DataGridViewModelValidator : AbstractValidator<DataGridViewModel>
{
public DataGridViewModelValidator()
{
RuleForEach(x => x.Times).SetValidator(new TimeSheetValidator());
}
}
【问题讨论】:
标签: c# wpf data-binding caliburn.micro fluentvalidation