C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: GetBindingの実行タイミング


(過去ログ 123 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■73539 / inTopicNo.1)  GetBindingの実行タイミング
  
□投稿者/ ハープスター (1回)-(2014/10/08(Wed) 15:16:09)

分類:[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を追加したいのですが、いいタイミングはないでしょうか?

どうか、お助けください。よろしくお願いします。

引用返信 編集キー/
■73540 / inTopicNo.2)  Re[1]: GetBindingの実行タイミング
□投稿者/ Hongliang (240回)-(2014/10/08(Wed) 19:21:01)
コントロール側でValidationRuleを操作するのは違和感が甚だしいですが……。

Binding.ValidationRulesを設定するのではなく、TextChangedにて、ValidationRule.Validateを自前で実行するのはどうでしょうか。
Validate失敗したときにはValidation.MarkInvalidで検証失敗を伝えます。
引用返信 編集キー/
■73589 / inTopicNo.3)  Re[2]: GetBindingの実行タイミング
□投稿者/ ハープスター (2回)-(2014/10/14(Tue) 13:27:31)
No73540 (Hongliang さん) に返信

レス遅れすみません。

OnLoadとDataContextChangedの組み合わせでなんとかできました。

アドバイスありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -