新しいエラーがすでに真しばらく来る場合Validation.HasErrorは再びトリガされません。

StackOverflow https://stackoverflow.com/questions/4606509

質問

私は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}"/>

と問題が解決されました。

結論 - 。ないコンバータを使用する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top