我的Silverlight应用程序中有以下文本框:
<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?
但是给出的解决方案对我不起作用。
答案 0 :(得分:3)
我最后更改了Property的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)的值 - 这不是我的数据模型&amp;我应该先检查一下,这意味着我需要在初始设置时缩放值:
this.PercentOfSale = Model.PercentOfSale;
请注意大写字母“P”。
并保存:
Model.PercentOfSale = this.percentOfSale * 100;
使其与数据库中存储的数据保持一致。
答案 1 :(得分:0)
使用转换器怎么样?
如果您不想更改输入值,则可以转换
Here is example转换器使用情况。