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
- WebScriptServiceHost.cs
- OdbcParameterCollection.cs
- ContentDisposition.cs
- Touch.cs
- ToolCreatedEventArgs.cs
- HtmlLabelAdapter.cs
- State.cs
- XmlSchemaAnyAttribute.cs
- TypedTableBaseExtensions.cs
- Int32Rect.cs
- Compiler.cs
- CryptoKeySecurity.cs
- CodeAttributeArgument.cs
- Model3D.cs
- CodeComment.cs
- ThemeDirectoryCompiler.cs
- DocComment.cs
- GlyphRunDrawing.cs
- AccessorTable.cs
- HMACMD5.cs
- DesignerVerbToolStripMenuItem.cs
- SecurityTokenRequirement.cs
- InstanceView.cs
- ListSurrogate.cs
- XmlSchemaType.cs
- DependencyPropertyChangedEventArgs.cs
- followingsibling.cs
- RefExpr.cs
- WhitespaceSignificantCollectionAttribute.cs
- CodeValidator.cs
- AudioDeviceOut.cs
- SkewTransform.cs
- __ComObject.cs
- DataSourceControlBuilder.cs
- NetMsmqBindingCollectionElement.cs
- SendMailErrorEventArgs.cs
- FormCollection.cs
- Track.cs
- DBDataPermission.cs
- ChangeInterceptorAttribute.cs
- DbSourceCommand.cs
- HttpServerUtilityBase.cs
- IriParsingElement.cs
- ListParagraph.cs
- BidOverLoads.cs
- HttpRequest.cs
- Keywords.cs
- RulePatternOps.cs
- PermissionSetEnumerator.cs
- SHA384CryptoServiceProvider.cs
- ObjectListGeneralPage.cs
- ConnectionPoint.cs
- VarRemapper.cs
- StringExpressionSet.cs
- HttpHeaderCollection.cs
- AutomationElementCollection.cs
- SelectorAutomationPeer.cs
- QuaternionRotation3D.cs
- documentsequencetextpointer.cs
- PreviewPageInfo.cs
- DPTypeDescriptorContext.cs
- NumberSubstitution.cs
- BatchParser.cs
- TextureBrush.cs
- Point.cs
- NamespaceImport.cs
- XmlBindingWorker.cs
- DataTemplateSelector.cs
- ContentType.cs
- TypeDescriptorContext.cs
- ClientTargetSection.cs
- MimeTypeAttribute.cs
- HostProtectionException.cs
- FrameSecurityDescriptor.cs
- IIS7WorkerRequest.cs
- ResourceDisplayNameAttribute.cs
- SqlDependencyUtils.cs
- PageFunction.cs
- BufferBuilder.cs
- QueuePathEditor.cs
- IncrementalReadDecoders.cs
- ReadOnlyHierarchicalDataSource.cs
- SimpleHandlerBuildProvider.cs
- XmlSerializerFactory.cs
- EventLogEntry.cs
- DesignerContextDescriptor.cs
- PeerTransportCredentialType.cs
- Part.cs
- ConfigurationConverterBase.cs
- ObjectPersistData.cs
- ObsoleteAttribute.cs
- UdpDiscoveryEndpoint.cs
- MenuBase.cs
- FormatterConverter.cs
- ProxyHelper.cs
- CompiledQueryCacheKey.cs
- XsdBuildProvider.cs
- streamingZipPartStream.cs
- CryptoProvider.cs
- HtmlInputSubmit.cs