IDataErrorInfo包含属性的多个错误消息

时间:2011-03-31 00:54:08

标签: wpf idataerrorinfo

看来其他人遇到此问题: Validation.HasError does not trigger again if new error comes in while already true

Validation.Error未使用最新的错误消息进行更新。

它显示上一个错误,而不是最后一个实际调用的错误。当我记录每个返回时,PropertyX大于或者PropertyX小于返回的值,但它不会在我的工具提示中显示该消息。它将显示“必需”。

我还发现,当PropertyX大于或者PropertyX小于返回值时,我的工具提示转换器不会被调用。

以下是验证码:

    string this[string columnName] 
    {
        get
        {
            switch(columnName)
            {
                case "Property1":
                    int output;
                    if (true == string.IsNullOrEmpty(this.Property1))
                    {
                        return "Required";
                    } else if (true == int.TryParse(this.Property1, out output))
                    {
                        return "Invalid integer";
                    } else if (true == this.Property1Int.HasValue &&
                    true == this.Property2Int.HasValue)
                    {
                        if (this.Property1Int.Value < this.Property2Int.Value)
                        {
                            return "Property2 is greater than Property1";
                        }
                    }

                    break;
                case "Property2":
                    int output;
                    if (true == string.IsNullOrEmpty(this.Property2))
                    {
                        return "Required";
                    } else if (true == int.TryParse(this.Property2, out output))
                    {
                        return "Invalid integer";
                    } else if (true == this.Property1Int.HasValue &&
                    true == this.Property2Int.HasValue)
                    {
                        if (this.Property2Int.Value > this.Property1Int.Value)
                        {
                            return "Property2 is greater than Property1";
                        }
                    }

                    break;
            };

            return string.Empty;
        }
    }

发生了什么事?

2 个答案:

答案 0 :(得分:3)

如果您正在使用转换器,就像其他问题一样,我们确信它不是最好的做事方式。特别是像WPF这样的动态环境。

所以我会建议直接绑定到(Validation.Errors).CurrentItem而不是使用转换器,如下所述:

http://joshsmithonwpf.wordpress.com/2008/10/08/binding-to-validationerrors0-without-creating-debug-spew/

答案 1 :(得分:0)

如果您的绑定使用的是转换器,则可以通过删除转换器并更改绑定来解决此问题。

例如,说XAML如下所示:

OnFailure

然后通过将代码更新为以下内容,您将绕过转换器:

<Setter Property="ToolTip" Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors), Converter={StaticResource yourConverter}}" />

在此处详细了解:https://docs.microsoft.com/en-us/dotnet/api/system.windows.data.relativesource.self?view=netframework-4.8