我使用 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>
和错误转换器:
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 永远不会从 True -> False -> True 发生变化。
有谁有这方面的经验或关于如何强制触发的建议吗?
这似乎就是答案:具有属性的多个错误消息的 IDataErrorInfo https://stackoverflow.com/questions/5494200/idataerrorinfo-with-multiple-error-messages-for-a-property/5513852#5513852
基本上,您绑定到当前项目并使用 ContentPresenter 来显示错误。它适用于我的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)