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");
}
}
}
}
我正在用 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");
}
}
}
}