Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Model / ModelPropertyCollectionImpl.cs / 1305376 / ModelPropertyCollectionImpl.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System.Collections.Generic; using System.Activities.Presentation.View; using System.ComponentModel; using System.IO; using System.Linq; // This provides a container for model properties of a modelItem. // This uses the TypeDescriptor.GetProperties() instead of using reflection // to get the properties of a model item. So any model instance implementing ICustomTypeProvider // is automatically taken care of. class ModelPropertyCollectionImpl : ModelPropertyCollection { ModelItem parent; bool createFakeModelProperties; public ModelPropertyCollectionImpl(ModelItem parent) { this.parent = parent; createFakeModelProperties = this.parent is FakeModelItemImpl; } public override IEnumeratorGetEnumerator() { foreach (PropertyDescriptor propertyDescriptor in GetPropertyDescriptors()) { yield return CreateProperty(parent, propertyDescriptor); } } protected override ModelProperty Find(System.Windows.DependencyProperty value, bool throwOnError ) { // We dont support dependency properties. if (throwOnError) { throw FxTrace.Exception.AsError(new NotSupportedException()); } else { return null; } } protected override ModelProperty Find(string name, bool throwOnError) { PropertyDescriptor propertyDescriptor = GetPropertyDescriptors()[name]; if (propertyDescriptor != null) { return CreateProperty(parent, propertyDescriptor); } return null; } ModelProperty CreateProperty(ModelItem parent, PropertyDescriptor propertyDescriptor) { bool isAttached = propertyDescriptor is AttachedPropertyDescriptor; return this.createFakeModelProperties ? (ModelProperty)(new FakeModelPropertyImpl((FakeModelItemImpl)parent, propertyDescriptor)) : (ModelProperty)(new ModelPropertyImpl(parent, propertyDescriptor,isAttached)); } PropertyDescriptorCollection GetPropertyDescriptors() { PropertyDescriptorCollection propertyDescriptors = PropertyDescriptorCollection.Empty; try { object instance = parent.GetCurrentValue(); if (instance != null) { if (!(instance is ICustomTypeDescriptor)) { Type instanceType = instance.GetType(); if (instanceType.IsValueType) { propertyDescriptors = TypeDescriptor.GetProvider(instanceType).GetTypeDescriptor(instanceType).GetProperties(); } else { propertyDescriptors = TypeDescriptor.GetProvider(instance).GetTypeDescriptor(instance).GetProperties(); } } else { propertyDescriptors = TypeDescriptor.GetProperties(instance); } } // Add browsable attached properties AttachedPropertiesService AttachedPropertiesService = this.parent.GetEditingContext().Services.GetService (); if (AttachedPropertiesService != null) { var browsableAttachedProperties = from attachedProperty in AttachedPropertiesService.GetAttachedProperties(this.parent.ItemType) where attachedProperty.IsBrowsable select new AttachedPropertyDescriptor(attachedProperty, this.parent); List mergedProperties = new List (); foreach (PropertyDescriptor propertyDescriptor in propertyDescriptors) { mergedProperties.Add(propertyDescriptor); } propertyDescriptors = new PropertyDescriptorCollection(mergedProperties.Concat(browsableAttachedProperties).ToArray(), true); } } catch (FileNotFoundException e) { EditingContext context = parent.GetEditingContext(); if (context.Items.GetValue () == null) { context.Items.SetValue(new ErrorItem { Message = e.Message, Details = e.ToString() }); } } return propertyDescriptors; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System.Collections.Generic; using System.Activities.Presentation.View; using System.ComponentModel; using System.IO; using System.Linq; // This provides a container for model properties of a modelItem. // This uses the TypeDescriptor.GetProperties() instead of using reflection // to get the properties of a model item. So any model instance implementing ICustomTypeProvider // is automatically taken care of. class ModelPropertyCollectionImpl : ModelPropertyCollection { ModelItem parent; bool createFakeModelProperties; public ModelPropertyCollectionImpl(ModelItem parent) { this.parent = parent; createFakeModelProperties = this.parent is FakeModelItemImpl; } public override IEnumerator GetEnumerator() { foreach (PropertyDescriptor propertyDescriptor in GetPropertyDescriptors()) { yield return CreateProperty(parent, propertyDescriptor); } } protected override ModelProperty Find(System.Windows.DependencyProperty value, bool throwOnError ) { // We dont support dependency properties. if (throwOnError) { throw FxTrace.Exception.AsError(new NotSupportedException()); } else { return null; } } protected override ModelProperty Find(string name, bool throwOnError) { PropertyDescriptor propertyDescriptor = GetPropertyDescriptors()[name]; if (propertyDescriptor != null) { return CreateProperty(parent, propertyDescriptor); } return null; } ModelProperty CreateProperty(ModelItem parent, PropertyDescriptor propertyDescriptor) { bool isAttached = propertyDescriptor is AttachedPropertyDescriptor; return this.createFakeModelProperties ? (ModelProperty)(new FakeModelPropertyImpl((FakeModelItemImpl)parent, propertyDescriptor)) : (ModelProperty)(new ModelPropertyImpl(parent, propertyDescriptor,isAttached)); } PropertyDescriptorCollection GetPropertyDescriptors() { PropertyDescriptorCollection propertyDescriptors = PropertyDescriptorCollection.Empty; try { object instance = parent.GetCurrentValue(); if (instance != null) { if (!(instance is ICustomTypeDescriptor)) { Type instanceType = instance.GetType(); if (instanceType.IsValueType) { propertyDescriptors = TypeDescriptor.GetProvider(instanceType).GetTypeDescriptor(instanceType).GetProperties(); } else { propertyDescriptors = TypeDescriptor.GetProvider(instance).GetTypeDescriptor(instance).GetProperties(); } } else { propertyDescriptors = TypeDescriptor.GetProperties(instance); } } // Add browsable attached properties AttachedPropertiesService AttachedPropertiesService = this.parent.GetEditingContext().Services.GetService (); if (AttachedPropertiesService != null) { var browsableAttachedProperties = from attachedProperty in AttachedPropertiesService.GetAttachedProperties(this.parent.ItemType) where attachedProperty.IsBrowsable select new AttachedPropertyDescriptor(attachedProperty, this.parent); List mergedProperties = new List (); foreach (PropertyDescriptor propertyDescriptor in propertyDescriptors) { mergedProperties.Add(propertyDescriptor); } propertyDescriptors = new PropertyDescriptorCollection(mergedProperties.Concat(browsableAttachedProperties).ToArray(), true); } } catch (FileNotFoundException e) { EditingContext context = parent.GetEditingContext(); if (context.Items.GetValue () == null) { context.Items.SetValue(new ErrorItem { Message = e.Message, Details = e.ToString() }); } } return propertyDescriptors; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Helper.cs
- BooleanAnimationBase.cs
- EventData.cs
- SafeThreadHandle.cs
- WindowsEditBox.cs
- HttpChannelHelpers.cs
- ClientCredentialsSecurityTokenManager.cs
- WebSysDescriptionAttribute.cs
- SqlExpressionNullability.cs
- SHA384Managed.cs
- _Rfc2616CacheValidators.cs
- Misc.cs
- ClientScriptManagerWrapper.cs
- FormViewInsertedEventArgs.cs
- TemplateBuilder.cs
- MouseDevice.cs
- FrameworkObject.cs
- CustomMenuItemCollection.cs
- mil_sdk_version.cs
- Quaternion.cs
- QueryInterceptorAttribute.cs
- Main.cs
- DocobjHost.cs
- InstalledVoice.cs
- GridViewRowPresenterBase.cs
- PropertyValueUIItem.cs
- IxmlLineInfo.cs
- CounterSampleCalculator.cs
- WebScriptMetadataInstanceContextProvider.cs
- CollectionViewGroupRoot.cs
- DataGridTextColumn.cs
- ThumbButtonInfoCollection.cs
- ChangePassword.cs
- XmlSchemaObjectCollection.cs
- DescendantQuery.cs
- Domain.cs
- ServiceMetadataContractBehavior.cs
- EndpointInstanceProvider.cs
- isolationinterop.cs
- Panel.cs
- XamlSerializerUtil.cs
- DataGridRowHeaderAutomationPeer.cs
- Avt.cs
- QueryCursorEventArgs.cs
- ThicknessAnimationUsingKeyFrames.cs
- SearchForVirtualItemEventArgs.cs
- SortQuery.cs
- Splitter.cs
- CSharpCodeProvider.cs
- WindowsHyperlink.cs
- Emitter.cs
- Decimal.cs
- Sorting.cs
- PermissionToken.cs
- SerialPort.cs
- PairComparer.cs
- MetadataProperty.cs
- X509RawDataKeyIdentifierClause.cs
- Rectangle.cs
- SaveFileDialog.cs
- ObjectItemCollection.cs
- ReadonlyMessageFilter.cs
- WebPartHelpVerb.cs
- TreeWalker.cs
- ACL.cs
- BaseUriHelper.cs
- CompositeFontFamily.cs
- SafeReadContext.cs
- TextParaClient.cs
- ClassHandlersStore.cs
- ObjectAssociationEndMapping.cs
- PointIndependentAnimationStorage.cs
- PrintingPermissionAttribute.cs
- PartialCachingControl.cs
- UidManager.cs
- HttpRuntimeSection.cs
- MediaSystem.cs
- MsmqIntegrationValidationBehavior.cs
- BamlBinaryReader.cs
- RNGCryptoServiceProvider.cs
- OleDbError.cs
- TableCellCollection.cs
- ReceiveMessageAndVerifySecurityAsyncResultBase.cs
- DataGridViewTopLeftHeaderCell.cs
- IndexedWhereQueryOperator.cs
- FullTextBreakpoint.cs
- MessagePropertyFilter.cs
- Utils.cs
- FormsAuthenticationTicket.cs
- ToolStripStatusLabel.cs
- ControlIdConverter.cs
- StringFunctions.cs
- SecureStringHasher.cs
- SectionXmlInfo.cs
- UTF8Encoding.cs
- WebReferenceCollection.cs
- XamlVector3DCollectionSerializer.cs
- TextRangeProviderWrapper.cs
- MediaSystem.cs
- TypefaceMetricsCache.cs