2009-05-07 7 views
2

私は、テキストブロックのtextプロパティにバリデータを設定しました。正しい検証のためには、私は、テキストブロックの親のusercontrolが必要ですが、バリデーターで持っている唯一のものは、値オブジェクト(文字列)とカルチャ(どちらでも役に立ちません)です。TextBlockのDataValidationでUserControlまたはVisualTreeを取得する

誰かが私のアプリケーションのビジュアルまたはコントロールにアクセスすることができないクラス/メソッドで特定のusercontrolを取得する方法を知っていますか?

+0

EDIT:コンバータでデータを必要とし、すべてのデータロジックをバリデータから外してしまう問題を解決しました。 – dalind

答えて

1

..私はバリにパラメータとして、ユーザーコントロールまたはテキストブロックを与えることができれば

問題が解決することができますが、私はそうする方法を見つけることができませんでしたあなたはに組み込まれた2つのバリデーションのプロパティを使用して検証を試みることができますBindingクラス:ValidatesOnExceptionsおよびValidatesOnDataErrors

ValidatesOnExceptionsでは、変換処理中に例外がスローされた場合、バインディングは無効です。この場合、カスタムコンバータを作成し、ユーザーコントロールをパラメータとして渡してから、バインディングが無効な場合はコンバーターに例外をスローすることができます。 ValidatesOnDataErrors

<Binding ValidatesOnExceptions="True"/> 

源がIDataErrorInfoを実装しIDataErrorInfo.Errorプロパティの非ヌル/空の文字列を返す場合、結合は無効です。あなたのソースがこのインタフェースを実装している、または実装できる場合は、ソース側のデータを検証できます。

<Binding ValidatesOnDataErrors="True"/> 
+0

問題は、バリデーターでは、データを正しく検証するために十分なデータ(usercontrolによって提供される)がないことです。したがって、これら2つのバリデーションは、データが正しいかどうかを判断するのに役立ちません。 IDataErrorInfoでは、私はテキストブロックの文字列より多くのデータを取得しません。残念ながら、データを検証するのに十分ではありません。 – dalind

+0

カスタムコンバータを作成し、必要なユーザーコントロールをコンバーターに渡すことはできませんか?コンバーターはバインディングプロセスで引数を受け取ることができます。バリデータはそうではないようです。 –

+0

理想的には、独自の検証を実行するために必要なプロパティとサービスを含むモデル(ViewModel)のラッパーを作成し、IDataErrorInfoを介してバインディングを検証することをお勧めします。 –

関連する問題