かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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になるっていう寸法です。当たり前と言えば当たり前なのですが、今まで気づいていませんでした。

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