Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- HandleExceptionArgs.cs
- MiniCustomAttributeInfo.cs
- DeriveBytes.cs
- FormsAuthenticationUser.cs
- ViewStateModeByIdAttribute.cs
- InternalsVisibleToAttribute.cs
- ErrorCodes.cs
- MenuItemBinding.cs
- UmAlQuraCalendar.cs
- InkCanvasFeedbackAdorner.cs
- StringUtil.cs
- GridViewDeletedEventArgs.cs
- FunctionParameter.cs
- DataControlFieldCollection.cs
- XmlDocumentSerializer.cs
- ColorInterpolationModeValidation.cs
- PerformanceCounterPermissionEntry.cs
- SQLInt32.cs
- XslAstAnalyzer.cs
- TreeNodeBinding.cs
- WindowsRichEditRange.cs
- ProfileProvider.cs
- XmlStreamStore.cs
- PassportAuthentication.cs
- EditorBrowsableAttribute.cs
- RadioButtonBaseAdapter.cs
- MetafileHeaderWmf.cs
- ContractBase.cs
- StringSource.cs
- _SingleItemRequestCache.cs
- XPathArrayIterator.cs
- WebPartCatalogCloseVerb.cs
- ISFTagAndGuidCache.cs
- Package.cs
- Resources.Designer.cs
- ProtocolReflector.cs
- MetadataSerializer.cs
- UnauthorizedWebPart.cs
- HostingEnvironmentSection.cs
- XmlEntity.cs
- NamespaceInfo.cs
- TextLineBreak.cs
- SafeEventLogWriteHandle.cs
- LocalFileSettingsProvider.cs
- ConfigsHelper.cs
- DataGridViewImageColumn.cs
- DuplicateContext.cs
- DrawListViewItemEventArgs.cs
- BridgeDataReader.cs
- SafeFileMapViewHandle.cs
- AdornerLayer.cs
- ButtonColumn.cs
- ToggleButtonAutomationPeer.cs
- ParseHttpDate.cs
- ImpersonateTokenRef.cs
- DataControlFieldHeaderCell.cs
- StrongNamePublicKeyBlob.cs
- ControlCachePolicy.cs
- DataGridItem.cs
- DependencyPropertyConverter.cs
- StylusEventArgs.cs
- BoolLiteral.cs
- BuildResult.cs
- FacetValueContainer.cs
- WebServiceReceiveDesigner.cs
- AliasExpr.cs
- SpellerHighlightLayer.cs
- DefaultHttpHandler.cs
- ActivityCodeDomSerializer.cs
- TextMetrics.cs
- CompareValidator.cs
- SqlConnectionStringBuilder.cs
- DataServices.cs
- ToolStripPanelRow.cs
- XmlDictionary.cs
- GridItem.cs
- SocketException.cs
- UnhandledExceptionEventArgs.cs
- SchemaReference.cs
- SystemResources.cs
- ToolboxSnapDragDropEventArgs.cs
- FormattedTextSymbols.cs
- DataGridViewCheckBoxColumn.cs
- DataObjectCopyingEventArgs.cs
- CompilerResults.cs
- CacheChildrenQuery.cs
- RangeValuePattern.cs
- M3DUtil.cs
- TypeNameParser.cs
- CharacterShapingProperties.cs
- Rotation3DAnimationUsingKeyFrames.cs
- InstanceContextManager.cs
- TextBox.cs
- AddInServer.cs
- EmptyImpersonationContext.cs
- Polyline.cs
- HttpDebugHandler.cs
- Pkcs7Signer.cs
- GridViewRowPresenterBase.cs
- DbProviderManifest.cs