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 文本验证工具提示的主要内容,如果未能解决你的问题,请参考以下文章

wpf中如何获得dataGrid选中行的值

WPF DataGrid 验证/绑定模式错误

如何将 DataGrid 中的文本框绑定到 Wpf 中的列表?

WPF DataGrid 验证错误未清除

在 WPF 中使用 DataTable 和 DataGrid 时发生 System.Windows.Data 错误

始终显示 WPF 文本框工具提示