मैं यह करने के लिए एक आसान तरीका नहीं मिली है। मुझे फॉर्म पर सभी नियंत्रणों के माध्यम से रिकर्स करने के लिए जाल के चारों ओर कुछ कोड मिला और यह निर्धारित किया गया कि उनमें से किसी के पास सत्यापन त्रुटियां हैं या नहीं। मैं एक विस्तार विधि में बदलकर समाप्त हो गया:
var errors = this.GetErrors();
if (errors.Count > 0)
{
MessageBox.Show(errors[0].ErrorContent.ToString());
return;
}
यह एक बहुत अधिक काम की तुलना में यह होना चाहिए है:
// 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];
}
तो फिर जब उपयोगकर्ता एक फार्म पर सहेजें बटन क्लिक करता है, मैं यह कर , लेकिन विस्तार विधि का उपयोग करके इसे थोड़ा सा सरल बना दिया जाता है।
स्रोत
2009-03-13 02:51:07
यह अच्छा समाधान है। धन्यवाद। – Jirapong