[英]wpf datagrid text validation tooltip
认为我的绑定在某处关闭,我想将验证错误显示为数据网格中的工具提示。 我会很感激有人就如何实现这一点提出建议或指出我的错误
我的简单测试模型:
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());
}
}
如果您的 XAML 看起来像,
<DataGrid ToolTip="{Binding Error}">
......
</DataGrid>
初始化 WPF 组件时,您将使用 Errors 属性值。 如果你想更新这个你要调用一个OnpropertyChanged
委托Error
到triggern绑定刷新。 这应该这样做,因为您已经在Error.Get
提供了数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.