損と申します。
VS2010+Blend4+Silverlight4で開発しております。
INotifyDataErrorInfoによるエラー検証処理の実装で、値が変更されない時にエラー検証が行えないため困っております。
やりたいこととしては、
1.初期画面ではTextBox.Textは空文字(このTextBoxは必須入力としたい)
2.初期画面ではエラーは表示しない
3.TextBoxにフォーカスを当てて、フォーカスを失ったらエラーを表示する
としたいです。
しかし、TextBox.Textの内容が空文字のまま変化しないと、Setterが呼ばれないため、エラー検証処理も走らず、行き詰っております。
LostFocusの中で以下のような処理をしたところ、見かけ上は目的の動作となりました。
protected override void OnLostFocus(RoutedEventArgs e)
{
string temp = this.Text;
this.SetValue(TextBox.TextProperty, temp + "_"); // 関係ない値を入れて無理やりSetterを動かす
this.SetValue(TextBox.TextProperty, temp); // 値を書き戻す
base.OnLostFocus(e);
}
しかし、これではSetterが2回呼ばれてしまい、バグの温床となりそうです。
スマートな実装方法は無いでしょうか。