代码之家  ›  专栏  ›  技术社区  ›  ChrisF

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

  •  0
  • ChrisF  · 技术社区  · 14 年前

    我的Silverlight应用程序中有以下文本框:

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

    哪里 PercentOfSale double .

    0.00%

    然而,当我输入一个新值(比如15)时,我得到:

    所以这个值被乘以100(不正确)。

    我的用户不想输入0.15作为值,所以我需要做什么才能让它接受15作为15%,而不是1500%?

    我在这里见过其他问题,比如

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   Samvel Siradeghyan    14 年前

    使用转换器怎么样?
    如果不想更改输入值,则可以进行转换。
    Here is example

        2
  •  3
  •   ChrisF    14 年前

    我最终更改了属性的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;
    

    this.PercentOfSale = Model.PercentOfSale;
    

    注意大写字母“P”。

    在保存时:

    Model.PercentOfSale = this.percentOfSale * 100;