5

コントロールの標準的な方法を使用して、壊れた BO ルールを報告しています。これは、BO のインターフェイス IDataError を介して行われ、XAML では、コントロールは BO のプロパティなどにバインドされます。このアプローチは問題なく機能します。ただし、無効化エラーのタイプ (または必要に応じてカテゴリ) に応じて、UI に 2 種類のビジュアルを表示する必要があります。必須フィールドの場合は CueBanner (透かし) を表示しますが、他のタイプの場合はコントロール ボーダーの色を変更します。どちらのシナリオでも、エラー メッセージのツール タイプを設定します。

IDataError の問題は、エラーの種類を区別するためのメソッド/プロパティがサポートされていないことです。

私ができる唯一の方法は、エラー テキストを調べることです。必須フィールドのテキストには、「required」というキーワードが含まれている必要があります。次のアプローチは適切ではありませんが、エラーの種類を特定し、それに応じて対処できる唯一の方法です。すべての必須フィールド ルールには、エラー テキストの一部として「必須フィールド」が含まれている必要があります。これをすべて機能させるために、ErrorMessage というカスタム依存関係プロパティを作成しました。私の ResourceDictionary には、Validation.HasError の Style.Trigger があります。そこで、依存関係プロパティの値を ErrorContent に設定します。依存関係プロパティの値が変更されたら、テキストを調べて、エラーの種類に合わせて Validation.SetErrorTemplate( myControl, newErrorTemplate) をテンプレートに設定できます。cueBanner テンプレートの削除または追加を管理するために、失われたフォーカスを得たなどのいくつかのイベントをコントロールに接続する必要がありますが、すべてが機能します。それが最善の方法であるかどうかはわかりません。

PS。ErrorTemplate を設定すると、コードでこれを行っています。つまり、ビルドして追加します。少なくとも 2 つのタイプを切り替える必要があることを念頭に置いて、Validation.SetErrorTemplate を静的リソースにポイントする方法はありますか?

あなたの考えをください..

4

2 に答える 2

3

エラータイプの列挙である追加のプロパティを追加するインターフェイス IDataError を派生させることは可能でしょうか。次に、それに対してバインドしようとすることができます。

于 2008-09-26T06:05:25.930 に答える
0

少し明確さが欠けている (テストされていない) アプローチで問題ない場合は、次のことを行うことができます: IDataErrorInfo インターフェイスで文字列を返す代わりに、例外をスローします。ErrorTemplate では、ValidationErrors (および ValidationError.Exception プロパティ) にアクセスできます。

次に、適切な Exception-Type をチェックして true または false を返すコンバーターと組み合わせて、例外で DataTrigger を使用します。仕事をするのに十分なはずです。

于 2011-11-07T13:31:29.483 に答える