0

DataAnnotations を介して Silverlight 5 アプリケーション内のデータを検証しようとしています。プロパティのセッター内で検証する限り、正常に機能するカスタム ValidationAttributes をいくつか作成しました。ユーザーがこの検証を行っているデータフォームを開いて、プロパティを変更せずに「保存」ボタンを押すと、オブジェクト全体を検証したいと思います。この部分で、私の実装は期待どおりに機能しません。Validator.TryValidateObject() を使用するメソッドを作成しました。結果では、ValidationExceptions がスローされていることがわかりますが、UI には表示されません。私が間違っていることを誰かが知っていますか?システムは、例外がスローされたプロパティを認識していないと思いますか?

public bool ValidateObject()
{
    var validationItems = new List<ValidationResult>();
    var result = new List<ValidationResult>();

    Validator.TryValidateObject(this, new ValidationContext(this), result, true);

    if (result.Count > 0)
    {
        foreach (var error in result)
        {
            throw new ValidationException(error.ErrorMessage = LanguageManager.Instance.GetLanguageString(error.ErrorMessage));
        }
    }

    return result.Count != 0;
}

LanguageManager は、現在選択されている言語でエラー メッセージを返すオブジェクトです。

ご助力ありがとうございます。

4

1 に答える 1

0

バインディング エンジンは検証例外を処理し、IDataErrorInfo が実装されているエラーを読み取りますが、どちらの場合も、これはターゲット プロパティが変更された場合にのみ発生します。

設定操作の範囲外で検証エラーを発生させたい場合は、INotifyDataErrorInfoを実装する必要があります。このインターフェイスを使用すると、Click ハンドラーでエラーのリストを作成できます。次に、無効なプロパティに対して ErrorsChanged イベントを発生させると、あとはバインディング エンジンが処理します。

于 2013-02-05T06:59:31.363 に答える