2010-11-10 55 views
0

值相乘我已經得到了下面的文本框在我的Silverlight應用程序:百分比入世到文本框100

<TextBox Text="{Binding Model.PercentOfSale, Mode=TwoWay, StringFormat=p}"/> 

其中PercentOfSale被定義爲double

如預期在文本框中顯示:

0.00%

然而,當我輸入一個新值(比方說15)我得到:

1,500.00 %

所以價值乘以100(不正確地)。

我的用戶不想輸入0.15作爲值,那麼我需要做什麼才能讓它接受15爲15%而不是1,500%?

我在這裏看到的其他問題,如

How to set WPF string format as percent wihout multiplying by 100?
Format decimal for percentage values?

但考慮到解決方案不爲我工作。

+1

也許你應該把用戶輸入除以100。按0.15存儲15%有很多好處。而且msdn很清楚這個值是乘以100,所以它對我來說看起來並不正確。 http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SpecifierPct – 2010-11-10 11:46:59

+0

@Nicolas - 我想我期待我輸入的值除以100,但也許我很天真。 – ChrisF 2010-11-10 11:51:48

回答

0

如何使用轉換器?
如果你不想改變輸入值,那麼你可以轉換。
Here is example轉換器的使用。

+0

我正在考慮一個轉換器,但我期待這會發生「自動」,因爲我已經指定了格式化程序。 – ChrisF 2010-11-10 11:58:21

3

我最終改變屬性的setter,以便它修改的值:

private decimal percentOfSale; 
public decimal PercentOfSale 
{ 
    get 
    { 
     return percentOfSale; 
    } 
    set 
    { 
     percentOfSale = value/100; 
     RaisePropertyChangedEvent("PercentOfSale"); 
    } 
} 

所以我的XAML變爲:

<TextBox Text="{Binding PercentOfSale, Mode=TwoWay, StringFormat=p}"/> 

,當我打開我的模型,我有:

this.percentOfSale = Model.PercentOfSale; 

注意小寫字母「p」 - 這樣可以避免初始設置時的縮放比例,以便StringFormat在綁定中正確工作,並且從UI設置值時它也會縮放。

然後當我要保存的數據,我有:

Model.PercentOfSale = this.percentOfSale; 

我居然發現百分比在被存儲的值從0到100(不爲0〜1) - 這不是我的數據模型&我應該先檢查,所以這意味着我需要在大規模的初始設定值:

this.PercentOfSale = Model.PercentOfSale; 

注意大寫字母「P」。

和儲蓄:

Model.PercentOfSale = this.percentOfSale * 100; 

與存儲在數據庫中的數據,使之回線。