bunu yapmak için kolay bir yol bulamadı. Formdaki tüm denetimlerde tekrarlamak için tuzakların etrafında bazı kodlar buldum ve bunların herhangi birinde doğrulama hataları olup olmadığını belirledim. Ben bir uzantısı yöntemine dönüştürerek sona erdi:
var errors = this.GetErrors();
if (errors.Count > 0)
{
MessageBox.Show(errors[0].ErrorContent.ToString());
return;
}
Bu çok daha fazla iş olması gerektiği oluyor daha: Kullanıcı bir form üzerinde Kaydet düğmesini tıkladığında Öyleyse
// Validate all dependency objects in a window
internal static IList<ValidationError> GetErrors(this DependencyObject node)
{
// Check if dependency object was passed
if (node != null)
{
// Check if dependency object is valid.
// NOTE: Validation.GetHasError works for controls that have validation rules attached
bool isValid = !Validation.GetHasError(node);
if (!isValid)
{
// If the dependency object is invalid, and it can receive the focus,
// set the focus
if (node is IInputElement) Keyboard.Focus((IInputElement)node);
return Validation.GetErrors(node);
}
}
// If this dependency object is valid, check all child dependency objects
foreach (object subnode in LogicalTreeHelper.GetChildren(node))
{
if (subnode is DependencyObject)
{
// If a child dependency object is invalid, return false immediately,
// otherwise keep checking
var errors = GetErrors((DependencyObject)subnode);
if (errors.Count > 0) return errors;
}
}
// All dependency objects are valid
return new ValidationError[0];
}
, bunu Ancak, uzantı yöntemini kullanarak biraz kolaylaştırır.
Bu güzel bir çözümdür. Teşekkür ederim. – Jirapong