wpf datagrid 文本验证工具提示
Posted
技术标签:
【中文标题】wpf datagrid 文本验证工具提示【英文标题】:wpf datagrid text validation tooltip 【发布时间】: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());
【问题讨论】:
【参考方案1】:如果您的 XAML 看起来像这样,
<DataGrid ToolTip="Binding Error">
......
</DataGrid>
您将在初始化 WPF 组件时使用 Errors 属性值。如果你想更新它,你必须为Error
调用OnpropertyChanged
委托来触发绑定刷新。应该这样做,因为您已经在 Error.Get
中提供了数据。
【讨论】:
以上是关于wpf datagrid 文本验证工具提示的主要内容,如果未能解决你的问题,请参考以下文章
如何将 DataGrid 中的文本框绑定到 Wpf 中的列表?