4

TextBox を % 値にバインドする必要があります。そこで、Binding に StringFormat プロパティを次のように設定します。

<TextBox Text="{Binding Path=BewertungsFaktore.Gewinn, StringFormat=P2, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource TextBoxStyle}" HorizontalAlignment="Left"/>

それはかなりうまくいくようです。しかし、値を編集すると問題が発生します。例として、値 1 を入力すると、テキスト ボックスはこれを 1% でフォーマットする必要があります。しかし、主な問題は、100.00% にフォーマットされることです。もう 1 つの質問は、ドイツの Sys を使用している場合、「.」の代わりに「,」を入力する必要があるかということです。

4

2 に答える 2

6

次のような文字列形式を使用するだけの場合、{0:F2}%4.23% を表すために 4.23 のようなデータベース値を我慢する必要がありますが、これは私には受け入れられません (SQL Server に「パーセンテージ」データ型が導入されるまで)。

4.2367% などの TextBox のパーセンテージ値を 0.042367 などのデータベース値にマップするために、次の値コンバーターを作成しました。

public class PercentageConverter : IValueConverter
{
    //E.g. DB 0.042367 --> UI "4.24 %"
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var fraction = decimal.Parse(value.ToString());
        return fraction.ToString("P2");
    }

    //E.g. UI "4.2367 %" --> DB 0.042367
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //Trim any trailing percentage symbol that the user MAY have included
        var valueWithoutPercentage = value.ToString().TrimEnd(' ', '%');
        return decimal.Parse(valueWithoutPercentage)/100;
    }
}

書式設定文字列 (この場合は "P2") は、表示される小数点以下の桁数のみを制限し、基になるバインディング ソースに渡される小数点以下の桁数は制限しないことに注意してください。

于 2013-05-29T04:52:18.410 に答える
3

StringFormatプロパティは、バインドされた値の出力文字列のみを制御します。"P2" は単純に値を 100 倍し、2 桁の 10 進数と末尾の "%" でフォーマットします。入力では、この形式は無視されます。

パーセント値も入力する必要がある場合は、バインディング コンバーターを使用する必要があります。このようなコンバーターは、次のようなカルチャ不変の方法で入力文字列を解析することもできます。

double fraction;
double percentage;
if (double.TryParse(value, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out percentage))
{
    fraction = percentage / 100d;
}
于 2012-08-27T08:48:45.623 に答える