[英]Validation of input wpf datagrid
我试图验证在WPF中的Datagrid中输入的输入。
我已经向XAML添加了验证规则。
输入不再是对象,而是字符串或整数。 虽然我使用的方法期望一个对象。
我如何解决该问题并使它与int或字符串一起工作。 输入只能是1到20之间的一个整数。
XAML :
<DataGridTextColumn Header="Niveau">
<DataGridTextColumn.Binding>
<Binding Path="Niveau" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<valRule:NiveautredeValidationRule />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
C#
public class NiveautredeValidationRule : ValidationRule
{
public override System.Windows.Controls.ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
NiveaudoelenViewModel doel = (value as BindingGroup).Items[0] as NiveaudoelenViewModel;
if (doel.Niveau <= 0 || doel.Niveau > 20)
{
return new System.Windows.Controls.ValidationResult(false, "Niveau moet tussen de 1 en 20 zijn!");
}
else
{
return System.Windows.Controls.ValidationResult.ValidResult;
}
}
}
您可以尝试以下方法:
public override System.Windows.Controls.ValidationResult Validate(object value,
System.Globalization.CultureInfo cultureInfo)
{
int myInt = 0;
try
{
if (((string)value).Length > 0)
myInt = int.Parse((String)value);
}
catch (Exception e)
{
return new ValidationResult(false, "Illegal characters or " + e.Message);
}
if (myInt < 0 || myInt > 20)
{
return new ValidationResult(false,
"Please enter a number in the range: 0 - 20");
}
else
{
return new ValidationResult(true, null);
}
}
来源: https : //docs.microsoft.com/zh-cn/dotnet/framework/wpf/data/how-to-implement-binding-validation
您应该考虑更新对此的可接受答案,这消除了try catch
并改用TryParse
public override System.Windows.Controls.ValidationResult Validate(object value,
System.Globalization.CultureInfo cultureInfo)
{
int myInt;
if (!int.TryParse(System.Convert.ToString(value), out myInt))
return new ValidationResult(false, "Illegal characters");
if (myInt < 0 || myInt > 20)
{
return new ValidationResult(false, "Please enter a number in the range: 0 - 20");
}
else
{
return new ValidationResult(true, null);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.