繁体   English   中英

wpf 数据网格文本验证工具提示

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM