我有一个 WPF DataGrid 并使用 DataGridTextColumn 绑定到一个集合。Collection 中的项目有一些浮动属性。
当我的程序启动时,我修改了 DataGrid 中 float 属性的值,如果我输入一个整数值,它就可以正常工作。但是如果我输入 char 。对于浮点值, char 。无法输入。我必须先输入所有数字,然后跳到 . 键入 char 的位置。完成我的输入。
那我怎么打字。在我的情况下?
谢谢。
我有一个 WPF DataGrid 并使用 DataGridTextColumn 绑定到一个集合。Collection 中的项目有一些浮动属性。
当我的程序启动时,我修改了 DataGrid 中 float 属性的值,如果我输入一个整数值,它就可以正常工作。但是如果我输入 char 。对于浮点值, char 。无法输入。我必须先输入所有数字,然后跳到 . 键入 char 的位置。完成我的输入。
那我怎么打字。在我的情况下?
谢谢。
也遇到了同样的问题。
就我而言,这是由于数据绑定选项。
我从 更改*.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
为*.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
。
然后它可以float
直接输入数字。
在绑定中尝试这个正则表达式验证。
<Validator:RegexValidationRule x:Key="DecimalValidatorFor3Digits"
RegularExpression="^\d{0,3}(\.\d{0,2})?$"
ErrorMessage="The field must contain only numbers with max 3 integers and 2 decimals" />
谢谢
CK 尼丁 (TinTin)
我想这是因为您的 datagridcolumn 绑定到具有十进制数据类型的类成员,例如
public class Product : ModelBase
{
decimal _price = 0;
public decimal Price
{
get { return _price; }
set { _price = value; OnPropertyChanged("Price"); }
}
}
和 UpdateSourceTrigger=PropertyChanged。摆脱它的一种方法是将属性更改为字符串类型,并如下操作字符串:
string _price = "0.00";
public string Price
{
get { return _price; }
set
{
string s = value;
decimal d = 0;
if (decimal.TryParse(value, out d))
_price = s;
else
_price = s.Substring(0, s.Length == 0 ? 0 : s.Length - 1);
OnPropertyChanged("Price");
}
}
希望能帮助到你
It could be an issue with Localization. Try changing the Culture settings of your thread to check out if this could be the problem:
using System.Globalization;
using System.Threading;
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
you can double-check the settings if you are unsure in which Culture you are running by going to Control Panel > Clock, Language and Region
or running the following code:
using System.Diagnostics;
Debug.WriteLine("decimal: " + Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator);
Debug.WriteLine("thousand: " + Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberGroupSeparator);