float プロパティにバインドされているテキスト ボックスに dot( ) または dot( ) の後'.'
にゼロを書き込むことができません。これは、float データ型にバインドすると、WPF が float バリデーターを自動的に追加するためです。 float プロパティに別のプロパティを使用するか、独自のバリデータを作成する必要がありますが、これを行う方法がわかりません。.0
UpdateSourceTrigger
PropertyChanged
DataAnnotation
2 に答える
StringFormat=N2 を追加すると、奇妙で望ましくない動作が発生します
そのための最も簡単な解決策は、UpdateSourceTrigger=PropertyChangedをLostFocusに変更することです。
しかし、本当に PropertyChanged を使用したい場合は、追加のプロパティを使用して次のようにバインドすることができます (この場合、ValueAddedTax に興味がありますが、ValueAddedTaxString にバインドします)。
private float valueAddedTax;
[Display(Name = "Value Added Tax")]
[Range(0, 100)]
public float ValueAddedTax
{
get { return valueAddedTax; }
set
{
SetProperty(ref valueAddedTax, value);
valueAddedTaxString = value.ToString();
}
}
private string valueAddedTaxString;
[NotMapped]
public string ValueAddedTaxString
{
get { return valueAddedTaxString; }
set
{
valueAddedTaxString = value;
if (!value.EndsWith("."))
{
float temp;
if (float.TryParse(value, out temp))
ValueAddedTax = temp;
}
}
}
「if (!value.EndsWith("."))」を削除すると、デフォルトの動作とまったく同じように動作します!!
これは一般的な問題です。この問題は、 ...に aStringFormat
を追加するだけで解決できます。Binding
<TextBox Text="{Binding Value, StringFormat={}{##.##}, FallbackValue=0.00}" />
小数点以下 3 桁の場合、次のように使用できます。
<TextBox Text="{Binding Value, StringFormat={}{##.###}, FallbackValue=0.00}" />
等々。
更新 >>>
これはクレイジーです...以前は使用していたはずですが、現在は機能していないようです。元の例が見つからないようですが、実験の結果、ある程度機能する次の形式が見つかりました。
<TextBox Text="{Binding Value, StringFormat=N, FallbackValue=0.00}" />
<TextBox Text="{Binding Value, StringFormat=N2, FallbackValue=0.00}" />
<TextBox Text="{Binding Value, StringFormat=N3, FallbackValue=0.00}" />
私はまだ元の例を探しています。
更新 2 >>>
残念ながら、元の例を見つけることができません...それがどのアプリケーションにあったかを思い出すことができれば.しかし、オンラインで簡単に検索した後、同様の投稿を見つけました( Weird TextBox issues with .NET 4.5 - no '.'許可された)少し前に答えたのですが、その投稿には同じ答えがあり、そのユーザーにとってはうまくいくようでした。
私はこれが現在機能していないことを完全に受け入れます (私たちのどちらにとっても)。理由がわかりません。そのため、最初の更新で提供された 3 つの形式からのみ説明できます。