【问题标题】:wpf datagrid text validation tooltipwpf datagrid 文本验证工具提示
【发布时间】: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


    【解决方案1】:

    如果您的 XAML 看起来像这样,

    <DataGrid ToolTip="{Binding Error}">
        ......
    </DataGrid>
    

    您将在初始化 WPF 组件时使用 Errors 属性值。如果你想更新它,你必须为Error 调用OnpropertyChanged 委托来触发绑定刷新。应该这样做,因为您已经在 Error.Get 中提供了数据。

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多