Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Controls / DataErrorValidationRule.cs / 1 / DataErrorValidationRule.cs
//---------------------------------------------------------------------------- // //// Copyright (C) by Microsoft Corporation. All rights reserved. // // // // Description: // DataErrorValidationRule is used when a ValidationError is the result of // a data error in the source item itself (e.g. as exposed by IDataErrorInfo). // //--------------------------------------------------------------------------- using System; using System.Collections; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using MS.Internal; namespace System.Windows.Controls { ////// DataErrorValidationRule can be added to the ValidationRulesCollection of a Binding /// or MultiBinding to indicate that data errors in the source object should /// be considered ValidationErrors /// public sealed class DataErrorValidationRule : ValidationRule { ////// DataErrorValidationRule ctor. /// public DataErrorValidationRule() : base(ValidationStep.CommittedValue, true) { } ////// Validate is called when Data binding is updating /// public override ValidationResult Validate(object value, CultureInfo cultureInfo) { // This rule is called during the CommittedValue step, so the value is the // owner of the rule collection - either a BindingGroup or an individual // binding expression. BindingGroup bindingGroup; BindingExpression bindingExpr; if ((bindingGroup = value as BindingGroup) != null) { // in a BindingGroup, check the item-level IDataErrorInfo for each // source item in the group IList items = bindingGroup.Items; for (int i=items.Count-1; i>=0; --i) { IDataErrorInfo idei = items[i] as IDataErrorInfo; if (idei != null) { string error = idei.Error; if (!String.IsNullOrEmpty(error)) { return new ValidationResult(false, error); } } } } else if ((bindingExpr = value as BindingExpression) != null) { // in a binding, check the error info for the binding's source // property IDataErrorInfo idei = bindingExpr.SourceItem as IDataErrorInfo; string name = (idei != null) ? bindingExpr.SourcePropertyName : null; if (!String.IsNullOrEmpty(name)) { // get the data error information, if any, by calling idie[name]. // We do this in a paranoid way, even though indexers with // string-valued arguments are not supposed to throw exceptions. // PreSharp uses message numbers that the C# compiler doesn't know about. // Disable the C# complaints, per the PreSharp documentation. #pragma warning disable 1634, 1691 // PreSharp complains about catching NullReference (and other) exceptions. // It doesn't recognize that IsCriticalException() handles these correctly. #pragma warning disable 56500 string error; try { error = idei[name]; } catch (Exception ex) { if (CriticalExceptions.IsCriticalException(ex)) throw; error = null; if (TraceData.IsEnabled) { TraceData.Trace(TraceEventType.Error, TraceData.DataErrorInfoFailed( name, idei.GetType().FullName, ex.GetType().FullName, ex.Message), bindingExpr); } } #pragma warning restore 56500 #pragma warning restore 1634, 1691 if (!String.IsNullOrEmpty(error)) { return new ValidationResult(false, error); } } } else throw new InvalidOperationException(SR.Get(SRID.ValidationRule_UnexpectedValue, this, value)); return ValidationResult.ValidResult; } internal static readonly DataErrorValidationRule Instance = new DataErrorValidationRule(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) by Microsoft Corporation. All rights reserved. // // // // Description: // DataErrorValidationRule is used when a ValidationError is the result of // a data error in the source item itself (e.g. as exposed by IDataErrorInfo). // //--------------------------------------------------------------------------- using System; using System.Collections; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using MS.Internal; namespace System.Windows.Controls { ////// DataErrorValidationRule can be added to the ValidationRulesCollection of a Binding /// or MultiBinding to indicate that data errors in the source object should /// be considered ValidationErrors /// public sealed class DataErrorValidationRule : ValidationRule { ////// DataErrorValidationRule ctor. /// public DataErrorValidationRule() : base(ValidationStep.CommittedValue, true) { } ////// Validate is called when Data binding is updating /// public override ValidationResult Validate(object value, CultureInfo cultureInfo) { // This rule is called during the CommittedValue step, so the value is the // owner of the rule collection - either a BindingGroup or an individual // binding expression. BindingGroup bindingGroup; BindingExpression bindingExpr; if ((bindingGroup = value as BindingGroup) != null) { // in a BindingGroup, check the item-level IDataErrorInfo for each // source item in the group IList items = bindingGroup.Items; for (int i=items.Count-1; i>=0; --i) { IDataErrorInfo idei = items[i] as IDataErrorInfo; if (idei != null) { string error = idei.Error; if (!String.IsNullOrEmpty(error)) { return new ValidationResult(false, error); } } } } else if ((bindingExpr = value as BindingExpression) != null) { // in a binding, check the error info for the binding's source // property IDataErrorInfo idei = bindingExpr.SourceItem as IDataErrorInfo; string name = (idei != null) ? bindingExpr.SourcePropertyName : null; if (!String.IsNullOrEmpty(name)) { // get the data error information, if any, by calling idie[name]. // We do this in a paranoid way, even though indexers with // string-valued arguments are not supposed to throw exceptions. // PreSharp uses message numbers that the C# compiler doesn't know about. // Disable the C# complaints, per the PreSharp documentation. #pragma warning disable 1634, 1691 // PreSharp complains about catching NullReference (and other) exceptions. // It doesn't recognize that IsCriticalException() handles these correctly. #pragma warning disable 56500 string error; try { error = idei[name]; } catch (Exception ex) { if (CriticalExceptions.IsCriticalException(ex)) throw; error = null; if (TraceData.IsEnabled) { TraceData.Trace(TraceEventType.Error, TraceData.DataErrorInfoFailed( name, idei.GetType().FullName, ex.GetType().FullName, ex.Message), bindingExpr); } } #pragma warning restore 56500 #pragma warning restore 1634, 1691 if (!String.IsNullOrEmpty(error)) { return new ValidationResult(false, error); } } } else throw new InvalidOperationException(SR.Get(SRID.ValidationRule_UnexpectedValue, this, value)); return ValidationResult.ValidResult; } internal static readonly DataErrorValidationRule Instance = new DataErrorValidationRule(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OleDbSchemaGuid.cs
- XhtmlTextWriter.cs
- WebSysDisplayNameAttribute.cs
- Pen.cs
- UserValidatedEventArgs.cs
- InvalidOleVariantTypeException.cs
- WebException.cs
- BlurBitmapEffect.cs
- QilGenerator.cs
- StrokeIntersection.cs
- BaseServiceProvider.cs
- InertiaExpansionBehavior.cs
- WebConfigurationFileMap.cs
- ToolStripPanelRenderEventArgs.cs
- AutoSizeToolBoxItem.cs
- DtrList.cs
- RemotingAttributes.cs
- AdapterDictionary.cs
- IsolatedStorageException.cs
- IntSecurity.cs
- ThicknessAnimationUsingKeyFrames.cs
- Events.cs
- DesignerActionKeyboardBehavior.cs
- EntityDataSourceWizardForm.cs
- BeginStoryboard.cs
- MethodImplAttribute.cs
- EntityTypeBase.cs
- GiveFeedbackEventArgs.cs
- WorkflowShape.cs
- SqlLiftIndependentRowExpressions.cs
- SHA256Managed.cs
- PeerNameRecordCollection.cs
- PackUriHelper.cs
- FontNamesConverter.cs
- StandardBindingOptionalReliableSessionElement.cs
- RuleCache.cs
- TableRowGroup.cs
- XmlSchemaAny.cs
- ReadOnlyNameValueCollection.cs
- FontConverter.cs
- ModelUIElement3D.cs
- NullableLongMinMaxAggregationOperator.cs
- FixedPageStructure.cs
- RotateTransform3D.cs
- XPathNodeInfoAtom.cs
- MembershipSection.cs
- processwaithandle.cs
- DecoderFallbackWithFailureFlag.cs
- WebFaultClientMessageInspector.cs
- Marshal.cs
- IdentityElement.cs
- ClaimComparer.cs
- SerializationTrace.cs
- SqlNode.cs
- SiteMap.cs
- FileChangesMonitor.cs
- RequestBringIntoViewEventArgs.cs
- TrackingProfileSerializer.cs
- PenContext.cs
- KnownAssemblyEntry.cs
- DataGridViewAccessibleObject.cs
- HMACSHA512.cs
- QilParameter.cs
- PropertyMappingExceptionEventArgs.cs
- SerializableAuthorizationContext.cs
- QilIterator.cs
- WebPartEditorOkVerb.cs
- IndicFontClient.cs
- HyperLinkDesigner.cs
- WebPartHeaderCloseVerb.cs
- BoundColumn.cs
- LinkDescriptor.cs
- PeerNode.cs
- CompilerCollection.cs
- SplitterPanel.cs
- SafeHandles.cs
- XmlSignatureManifest.cs
- RemotingClientProxy.cs
- RuntimeConfigLKG.cs
- COMException.cs
- HttpConfigurationSystem.cs
- XPathChildIterator.cs
- EncryptedType.cs
- EntityExpressionVisitor.cs
- CatalogZoneBase.cs
- InputScopeNameConverter.cs
- SafeBitVector32.cs
- ConditionalWeakTable.cs
- SqlMethodCallConverter.cs
- DbDataSourceEnumerator.cs
- SplashScreen.cs
- MethodToken.cs
- EntityProxyFactory.cs
- QueryNode.cs
- SqlColumnizer.cs
- ToolZoneDesigner.cs
- GPRECTF.cs
- EventWaitHandle.cs
- UserControlParser.cs
- HttpPostedFile.cs