かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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

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