Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / System / Windows / Controls / DataErrorValidationRule.cs / 2 / 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
- DPTypeDescriptorContext.cs
- DoubleCollectionValueSerializer.cs
- ValueTypeFixupInfo.cs
- AssemblyNameUtility.cs
- HotSpot.cs
- DocumentPageViewAutomationPeer.cs
- BindingSource.cs
- MinimizableAttributeTypeConverter.cs
- CompilerHelpers.cs
- EmbossBitmapEffect.cs
- TableStyle.cs
- DesignerRegion.cs
- XmlSchemaNotation.cs
- OrderedDictionaryStateHelper.cs
- LinkedResourceCollection.cs
- PrimitiveCodeDomSerializer.cs
- SessionStateContainer.cs
- HtmlTernaryTree.cs
- ExtendedPropertyInfo.cs
- ControlBuilderAttribute.cs
- LoaderAllocator.cs
- WindowsListViewGroupSubsetLink.cs
- SimpleExpression.cs
- StylusDownEventArgs.cs
- SqlNamer.cs
- StandardBindingReliableSessionElement.cs
- ParallelTimeline.cs
- DataGridViewComboBoxColumnDesigner.cs
- PropertyCondition.cs
- CallbackValidator.cs
- MeasureData.cs
- DependentList.cs
- ErasingStroke.cs
- DataGridAddNewRow.cs
- InvalidProgramException.cs
- VersionValidator.cs
- DocumentReferenceCollection.cs
- LinqDataSourceContextEventArgs.cs
- SrgsDocumentParser.cs
- OracleLob.cs
- MergePropertyDescriptor.cs
- DocumentOrderComparer.cs
- SqlError.cs
- FontStretches.cs
- Trigger.cs
- VisualStyleElement.cs
- xmlformatgeneratorstatics.cs
- FlowLayout.cs
- List.cs
- EngineSiteSapi.cs
- StatusBar.cs
- ColorMatrix.cs
- LinqDataSourceView.cs
- Utility.cs
- ThemeableAttribute.cs
- FlowchartDesigner.xaml.cs
- SqlGatherProducedAliases.cs
- Speller.cs
- ScrollEventArgs.cs
- TreeNodeMouseHoverEvent.cs
- AuthenticateEventArgs.cs
- ContextStack.cs
- TraceListener.cs
- versioninfo.cs
- DoubleLinkListEnumerator.cs
- __FastResourceComparer.cs
- ApplicationServiceHelper.cs
- XmlExceptionHelper.cs
- Cursors.cs
- PackagePart.cs
- FilePresentation.cs
- Enum.cs
- ToolStripSystemRenderer.cs
- KeyToListMap.cs
- QuotaThrottle.cs
- BinarySerializer.cs
- Maps.cs
- TrustSection.cs
- EntityAdapter.cs
- DataServiceQueryProvider.cs
- HtmlUtf8RawTextWriter.cs
- CodeCommentStatement.cs
- ToolStripTextBox.cs
- AppDomainUnloadedException.cs
- XmlSchemaComplexContentRestriction.cs
- SqlError.cs
- ListViewCancelEventArgs.cs
- EntityDataSourceWrapper.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- RepeatBehaviorConverter.cs
- ByteArrayHelperWithString.cs
- WebSysDescriptionAttribute.cs
- RepeaterItem.cs
- sqlmetadatafactory.cs
- HandlerElementCollection.cs
- XmlEncoding.cs
- UIElementParagraph.cs
- VScrollBar.cs
- Win32Exception.cs
- AssemblyName.cs