WPF のテキストボックスで、Text にバインドしている場合、通常はテキストボックスがフォーカスを失うとき (LostFocus)にバインディング元(ソース)が更新される。
ふつうはこれで問題ないのだが、別のコントロールに入力文字数を表示しているときなど、入力中に更新してほしい場合は、これでは困る。
下記ページで解決策を見つけたので、メモしておく。
基本的には Binding の UpdateSourceTrigger を PropertyChanged に変えればよい。これでテキストが変更されたとき(TextChanged)にソースが更新されるようになる。
XAML の場合はこんな感じ。
<TextBox Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged}"/>
ちなみに UpdateSourceTrigger の既定値は LostFocus。また、Explicit に設定するとユーザーが下記のようなコードで UpdateSource を呼び出すまで、変更が遅延できる。
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
Kenz Yamada(山田研二)。1984年生。大阪。ちょっとずつ好きなプログラム作ってます。
好きなものはカメラと旅行。ガジェットや身の回り、ちょっとこだわります。
詳しくは Web mixi で。