在文本框中输入百分比将值乘以100

时间:2010-11-10 11:36:52

标签: silverlight mvvm prism

我的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?

但是给出的解决方案对我不起作用。

2 个答案:

答案 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转换器使用情况。