|
分類:[C#]
こんにちは。 現在、TextBox(System.Windows.Controls)を継承したOriginalTextBoxクラスをC#コードで作成中です。
OriginalTextBoxの役割は・・・ XAML内で、 (例) <Controls:OriginalTextBox FieldName="得意先コード" Text="{Binding Code, ・・・}" >
と記述するだけで、 別途用意されているXMLファイルから、"得意先コード"を検索して、バイト数属性の値(="5")を取得し、 TextのShiftJIS上のバイト数が 5 を超えた場合に、Validation.Errorsに追加してくれる、 というものです。 (実際はバイト数属性以外にもありますが、割愛します。)
Validation.Errorsに追加するために、 ValidationRuleを、次のようにして追加しています。
textBinding = BindingOperations.GetBinding(this, TextBoxEx.TextProperty); ・・・@ if (textBinding != null) { TextControlValidationRule validationRule = new TextControlValidationRule(Window.GetWindow(this)); textBinding.ValidationRules.Add(validationRule); }
※TextControlValidationRule ・・・ 抽象クラスValidationRuleを継承したクラス
TextControlValidationRule クラスのValidateメソッド(override)で、チェックをおこない、 ValidationResultを返しています。
さて、今引っかかっているのは、ValidationRuleの追加タイミングです。
OriginalTextBoxクラスのコンストラクタやDataContextChangedイベントで実行すると、 上の@のGetBindingが取得できずに、textBindingがnullのため、ValidationRuleが追加されません。
初回のTextChangedイベント発生時に実行すると、2回目以降の入力では正常にValidation.Errorsが追加されるのですが、 初回の入力で、TextControlValidationRuleクラスのValidateメソッドが実行されないため、 製品としては不合格となります。(6バイトの文字をコピペされるとアウトなので)
なんとか、@のGetBindingが取得できるようになった直後のイベントで、 ValidationRuleを追加したいのですが、いいタイミングはないでしょうか?
どうか、お助けください。よろしくお願いします。
|