Я использую 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 никогда не меняется с True -> False -> True.
Есть ли у кого-нибудь опыт с этим или каким-либо советомкак заставить спусковой крючок?