新しいエラーがすでに真しばらく来る場合Validation.HasErrorは再びトリガされません。
-
25-09-2019 - |
質問
私はIDataErrorInfoを実装MVVM、私のオブジェクトを使用します。プロパティが設定されている場合、私は、カスタム検証メソッドを実行し、検証に合格した場合、私はfalseにValidation.HasErrorを設定String.Emptyのを、返します。検証が失敗した場合、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の - 。>真
ん誰?トリガを強制する方法として、このまたはいくつかのアドバイスの経験を持っている。
解決
この答えのように見える: 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}"/>
と問題が解決されました。
結論 - 。ないコンバータを使用する