Validation.HasError如果有新的错误出现在同时已经成为事实不会再次触发
-
25-09-2019 - |
题
我用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}"/>
和的问题就解决了。
结论 - 不使用转换器
不隶属于 StackOverflow