私は私のPOCOエンティティのintフィールドにバインドされているテキストボックスを使用しているWPFアプリケーションを開発しています。テキストボックスをクリアすると、nullではないフィールドであるため、現在のオブジェクトが無効になります。
しかし、私のテキストボックスをクリアすると、int型の値に設定することはできませんstring.emptyに変換されるので、私のintフィールドは決して更新されず、オブジェクトは有効なままです。
親切に、これに対する論理的な解決方法を提案します。
必須
デフォルトでWPFは、検証エラーが発生したときに ErrorTemplate を表示する必要があります。これには、文字列フィールドを int に格納しようとするなど、無効なキャストによる検証エラーが含まれます。 TextBox の既定の ErrorTemplate は赤い枠線で、ほとんどのユーザーにとっては何かが間違っていて変更が保存されないことを示しています。
ErrorTemplate
int
TextBox
それ以上のものが必要な場合は、バインドで int に値をキャストしようとする IValueConverter を使用して、0(または無効な値)それが失敗した場合、あなたのオブジェクトはユーザーが何を入力しても何かで更新されます。
IValueConverter
1つの方法は、代わりに文字列値にバインドすることです(モデルを汚染したくない場合は、おそらくビューモデルに追加します)。次に文字列プロパティのセッターで文字列を整数に変換してintに格納しますプロパティ。
私は答えをここからコピーしました。それがあなたにも役立つことを願っています。
viewmodelにint型のプロパティがある場合、バインディングのちょうど あなたのビューにint型に変換可能な入力がある場合は動作します。さもないと あなたのビューモデルは通知されません。今のところ2つの方法があります: まず、あなたの視点が数値入力を受け入れることを確認します( あなたの数字のテキストボックス)とviewmodelプロパティはintにすることができます。 または第2:viewmodelプロパティの型はtypeof stringです。 IDataErrorInfoは、入力が数値でないときにビューに通知させます。
viewmodelにint型のプロパティがある場合、バインディングのちょうど あなたのビューにint型に変換可能な入力がある場合は動作します。さもないと あなたのビューモデルは通知されません。今のところ2つの方法があります:
まず、あなたの視点が数値入力を受け入れることを確認します( あなたの数字のテキストボックス)とviewmodelプロパティはintにすることができます。
または第2:viewmodelプロパティの型はtypeof stringです。 IDataErrorInfoは、入力が数値でないときにビューに通知させます。
私が見ているように、intコントロールに「空の」値を設定することはできません。 おそらく、拡張WPFツールキットの IntegerUpDown コントロールを使用すると、 NULL値の代わりにテキストを表示するウォーターマーク、またはデフォルト値を設定します。値は0にすることができます。
また、必要に応じて隠すことができるボタンスピナーを備えています。