2012-08-27 53 views
3

我不得不一个TextBox绑定到%值。所以我设置绑定的StringFormat属性是这样的:WPF文本框结合率

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

这似乎工作得很好。但是,如果我编辑的价值有问题。 例如,如果我输入1的值,则文本框应将其格式化为1%。 但主要问题是它格式化为100.00%。 另一个问题是,如果我使用的是德国Sys系统是否必须输入“” instaed一个的“”?

+0

确定找到了解决的StringFormat = {} {0:F2}% –

+0

你可以发表你的解决方案作为一个答案,并接受呢?为了将来的参考 – SynerCoder

回答

3

StringFormat属性仅控制限值的输出串。 “P2”只是将值乘以100,并用两位十进制数字和尾随的“%”格式化。在输入时,这种格式被忽略。

如果您还需要输入百分比值,你将不得不使用一个binding converter。这种转换器也可以解析输入字符串在这样的文化不变的方式:

double fraction; 
double percentage; 
if (double.TryParse(value, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out percentage)) 
{ 
    fraction = percentage/100d; 
} 
3

如果你只是使用像{0:F2}%字符串格式,那么你将不得不忍受与数据库值像4.23代表4.23%这是我无法接受的(直到他们将“百分比”数据类型引入到SQL Server中)。

我创建了下面的值转换成百分比值在TextBox喜欢4.2367%喜欢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”)唯一的限制是如何许多小数位显示,许多小数位不是如何传递到底层绑定源。

+0

这很好,我一直在努力寻找一个像样的解决方案。谢谢! –