かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

TextBoxで未入力の場合にBindingしてるソースのプロパティにnullを入れたい

こんなことってないですか?私はあります。
具体的に言うと、int?型のプロパティをTextBoxのTextプロパティにバインドしたときに、何も入力してない状態だとnullを入れてほしいという状態です。通常の状態だと何か入力したあとにバックスペースで空文字にすると、空文字になってしまいint?型に変換できないためViewModelのプロパティまで値がわたってきません。

IDataErrorInfoで、エラーの検証で必須入力項目のチェックをしてても、そこにたどり着く前に型変換で落ちてしまって悲しい感じになってしまいます。これをTextBoxのTextプロパティが空文字のときにnullを入れるようにする方法があります。存在は知ってたけど、こういう風な使い道があるとは考えてなかったのでメモとして残しておきます。

そいつの名前はBindingのTargetNullValueプロパティです。こいつを以下のように書くことで、空文字のときにnullがプロパティに渡ってくるようになります。

<TextBox Text="{Binding Path=NumberInput, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}" />

TargetNullValueは、ここに指定した値をnullとして扱うみたいな動きをするBindingの設定で、そこに空文字を指定することで空文字のときはnullになるっていう寸法です。当たり前と言えば当たり前なのですが、今まで気づいていませんでした。

メモメモ。久しぶりの小技でした。