Ich habe ein Benutzersteuerelement, das eine Textbox enthält. Ich habe eine Klasse namens Person, die implementiert IDataErrorInfo Schnittstelle:IDataErrorInfo: Eingabe nicht validieren
public partial class TxtUserControl : UserControl
{
private Binding _binding;
public void SetSource(string path,Object source)
{
_binding = new Binding(path);
_binding.Source = source;
ValidationRule rule;
rule = new DataErrorValidationRule();
rule.ValidatesOnTargetUpdated = true;
_binding.ValidationRules.Add(rule);
_binding.ValidatesOnDataErrors = true;
_binding.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
_binding.NotifyOnValidationError = true;
_binding.ValidatesOnExceptions = true;
txtNumeric.SetBinding(TextBox.TextProperty, _binding);
}
...
}
Das WPF-Fenster, das die Steuer Benutzer umfasst hat:
class Person : IDataErrorInfo
{
private bool hasErrors = false;
#region IDataErrorInfo Members
public string Error
{
get
{
string error = null;
if (hasErrors)
{
error = "xxThe form contains one or more validation errors";
}
return error;
}
}
public string this[string columnName]
{
get
{
return DoValidation(columnName);
}
}
#endregion
}
Nun ist die Usercontrol ein Verfahren SetSource, durch die der Code wird die Bindung genannt aussetzt Mit dem folgenden Code:
public SampleWindow()
{
person= new Person();
person.Age = new Age();
person.Age.Value = 28;
numericAdmins.SetSource("Age.Value", person);
}
private void btnOk_Click(object sender, RoutedEventArgs e)
{
if(!String.IsNullOrEmpty(person.Error))
{
MessageBox.Show("Error: "+person.Error);
}
}
dieser Code gegeben, die Bindung funktioniert gut, aber die Validierung wird nie ausgelöst. Was ist mit diesem Code falsch?
Paul, Ich habe mir das von Ihnen entwickelte Framework angesehen. Gibt es einen anderen Weg, dies zu tun? Wenn Sie hier einige Hinweise geben könnten, wäre es großartig. – Ngm
Lassen Sie Age IDataErrorInfo implementieren oder verwenden Sie eine WPF ValidationRule (Validierung auf der Benutzerebene) - dies sind die einzigen Problemumgehungen, die ich mir vorstellen kann. –
Mit meinem Validierungsframework würden Sie einfach das UI-Steuerelement mit einem Regelnamen (z. B. "AgeValue") verknüpfen und in Ihrer IDataErrorInfo würden Sie die Validierung der Regel "AgeValue" durchführen. In meinem Framework gibt es keine Kopplung zwischen Eigenschaftsnamen und Validierungsregelnamen, wie es bei der WPF-Validierung der Fall ist. –