Validação do datagrid do wpf de entrada
estou a tentar validar a entrada que é introduzida no Datagrid no WPF.
Adicionei uma regra de validação ao XAML.a entrada é mais um objecto do que uma cadeia ou int. Embora o método que uso espere um objecto.
Como posso resolver o problema e fazê-lo funcionar com um int ou string. A entrada só pode ser um int entre 1 e 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;
}
}
}
0
Author: Rand Random, 2018-01-17
2 answers
Podes tentar isto:
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);
}
}
Fonte: https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-binding-validation
1
Author: Atlasmaybe, 2018-01-17 14:09:08
Você deve considerar a actualização da resposta aceptada a isto,
isto elimina o try catch
e usa TryParse em vez de
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);
}
}
1
Author: Rand Random, 2018-01-23 11:56:55