我用MVVM和我对象实现IDataErrorInfo的。当一个属性设置,我运行自定义的验证方法,如果验证通过,我回来的String.Empty,这台Validation.HasError为false。如果验证失败,Validation.HasError设置为true。我有一个风格,我使用的“所需的控制”(将执行验证控制)和组是到任何错误是这样控制的工具提示:

<Style x:Key="RequiredControl" TargetType="{x:Type Control}" >
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding (Validation.Errors), Converter={StaticResource ErrorConverter}, RelativeSource={x:Static RelativeSource.Self}}"/>
        </Trigger>
    </Style.Triggers>
</Style>

和所述ErrorConverter:

public class ZynErrorContentConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var errors = value as ReadOnlyObservableCollection<ValidationError>;
        if (errors == null) return "";

        return errors.Count > 0 ? errors[0].ErrorContent : "";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

问题是这样的:用户输入无效的东西......而Validation.HasError设置为true。因为它是应该的工具提示更新。如果用户试图纠正错误,而是进入,导致不同类型无效的值,则提示应显示新的错误字符串,但这种情况不会发生。误差表示从第一误差相同的错误。我知道为什么会这样(我认为)......因为触发器不会被触发,因为Validation.HasError从来没有从真正的改变 - >假 - >真

没有任何人有任何这方面的经验或一些建议至于如何强制触发?

有帮助吗?

解决方案

这似乎是答案: IDataErrorInfo的随着为一个属性

的多个错误消息

基本上,绑定到当前项并使用ContentPresenter以显示错误。它的工作对我的代码。

其他提示

我相信我已经想通了这一点。罪魁祸首是使用了变频器。 我遇到相同的问题并且该问题代码段是:

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

我的片断更改为:

<Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
        Path=(Validation.Errors)[0].ErrorContent}"/>

和的问题就解决了。

结论 - 不使用转换器

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top