WPF - 文本框绑定十进制值

WPF - Textbox binding decimal value

我正在用 C# 编写一个 WPF 程序,我正在尝试找出一种方法来绑定两个具有十进制值的文本框。我有两个不同的文本框绑定了两个不同的属性。

我希望当用户更改 "Cost" 时,"Price" 会自动填充,当他更改 "Price" 时,成本也会自动填充。这就像我不想要的 loop 一样。 而且我还注意到与十进制值绑定的文本框不允许添加逗号和点字符 '.'',' .

我该如何解决这两个问题?

这些是 XAML 个文本框:

<TextBlock Grid.Row="0" Grid.Column="0" Text="Cost" Margin="5,5,0,0" />
<TextBox Grid.Row="1" Grid.Column="0"   Text="{Binding Cost, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="Price" Margin="5,5,0,0" />
<TextBox Grid.Row="1" Grid.Column="1"   Text="{Binding Price ,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

这是两个属性:

private decimal _cost;
public decimal Cost
{
    get { return _cost; }
    set
    {
        if (_cost != value)
        {
            _cost = value;
            NotifyOfPropertyChange("Cost");

            if (Cost > 0)
            {
                Price = Math.Round(_cost * ((decimal)1.50), 2);
                NotifyOfPropertyChange("Price");
            }

        }
    }
}

private decimal _price;
public decimal Price
{
    get { return _price; }
    set
    {
        if (_price != value)
        {
            _price = value;
            NotifyOfPropertyChange("Price");

            if (Price > 0)
            {
                Cost = Math.Round(Price / (decimal)(1.55), 2);
                NotifyOfPropertyChange("Cost");
            }                    
        }
    }
}

编辑解决方案 在网上搜索我发现解决方案here只需要添加StringFormat=0{0.0}。希望它能帮助别人。

您可以使用后场来设置值。看到流动的

private decimal _cost;
public decimal Cost
{
    get { return _cost; }
    set
    {
        if (_cost != value)
        {
            _cost = value;
            NotifyOfPropertyChange("Cost");

            if (_cost > 0)
            {
                _price = Math.Round(_cost * ((decimal)1.50), 2);
                NotifyOfPropertyChange("Price");
            }

        }
    }
}

private decimal _price;
public decimal Price
{
    get { return _price; }
    set
    {
        if (_price != value)
        {
            _price = value;
            NotifyOfPropertyChange("Price");

            if (_price > 0)
            {
                _cost = Math.Round(_price / (decimal)(1.55), 2);
                NotifyOfPropertyChange("Cost");
            }                    
        }
    }
}