私は私のPOCOエンティティのintフィールドにバインドされているテキストボックスを使用しているWPFアプリケーションを開発しています。 null不可能なフィールド。テキストボックスでIntegerデータ型のPoCo検証
しかし、私のテキストボックスをクリアすると、int型の値に設定できないstring.emptyに変換されるため、intフィールドが更新されず、オブジェクトが有効なままになります。
これにはいくつかの論理的な解決策を示唆しています。
私は私のPOCOエンティティのintフィールドにバインドされているテキストボックスを使用しているWPFアプリケーションを開発しています。 null不可能なフィールド。テキストボックスでIntegerデータ型のPoCo検証
しかし、私のテキストボックスをクリアすると、int型の値に設定できないstring.emptyに変換されるため、intフィールドが更新されず、オブジェクトが有効なままになります。
これにはいくつかの論理的な解決策を示唆しています。
代わりに文字列値にバインドする方法があります(モデルを汚染したくない場合は、おそらくビューモデルに追加します)。次に、文字列プロパティの設定ツールで文字列を整数に変換します。 intプロパティに格納します。
私が見ているように、あなたはintコントロールに「空の」値を設定すべきではありません。 たぶん、あなたは、それはまた、ボタンスピナーを持っ0
することができた、あなたがNULL値の代わりにテキストを表示するか、デフォルト値を設定するための透かしを提供することができますExtended WPF ToolkitでIntegerUpDownコントロールを使用することができます必要に応じて非表示にすることができます。
Nah、Integer updownコントロールは私のクライアントが望むものではありません。私は論理的で実際のpoco検証に近いものを求めています。 –
他のコントロールと同じように検証を使用できます。ヌルが設定されているときにデフォルト値を設定できることをお知らせします。 – Natxo
私は答えをhereからコピーしました。それがあなたにも役立つことを願っています。
あなたのviewmodelは、int型のプロパティを持っている場合、その後、あなたの結合だけ 作品ビューはint型に変換可能である入力を得た場合。そうでなければ あなたのビューモデルに通知されません。
最初に:あなたのビューは数字入力を受け入れることができます( 数値テキストボックスを使用)。また、viewmodelプロパティはintにすることができます。
または2番目:viewmodelプロパティの型がtypeof stringで、 IDataErrorInfoを使用して、入力が数値でない場合にビューに通知させます。検証エラーが発生したときにデフォルトWPFによって
はErrorTemplate
が表示されるはずですが、これは、このようなint
に文字列フィールドを保存しようとしているとして、無効なキャストによって引き起こさ検証エラーが含まれています。 TextBox
の既定値ErrorTemplate
は赤い境界線です。ほとんどのユーザーにとっては、これは何かが間違っていて、変更が保存されないことを示しています。
あなたはそれ以上の何かをしたい場合、それはので、あなたのオブジェクトが更新されます失敗した場合、あなたはint
に値をキャストしようとすると、0(または何らかの無効な値)を返しますされ、あなたの結合にIValueConverter
を使用して試みることができますユーザーが何を入力しても何かで
'Required'属性を設定していますか? –
これは必須の属性ではなく、バインドされたプロパティに値が指定されていない場合でも、以前の入力値を保持するプロパティです。 –
これを0に設定しますか? –