2012-08-27 91 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

這很好,我一直在努力尋找一個像樣的解決方案。謝謝! –