Code:
/ 4.0 / 4.0 / untmp / 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 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
- securitycriticaldataformultiplegetandset.cs
- CodeObject.cs
- ArraySet.cs
- ConfigurationPermission.cs
- UInt32.cs
- CategoryNameCollection.cs
- ProgressBar.cs
- CorrelationManager.cs
- BaseResourcesBuildProvider.cs
- BaseHashHelper.cs
- WebPartCloseVerb.cs
- TraceListeners.cs
- BinarySecretKeyIdentifierClause.cs
- AgileSafeNativeMemoryHandle.cs
- ProviderConnectionPointCollection.cs
- GetLedgerEntryForRecipientRequest.cs
- AccessedThroughPropertyAttribute.cs
- DecimalConstantAttribute.cs
- Panel.cs
- SqlNamer.cs
- ArgumentValueSerializer.cs
- ReturnValue.cs
- ParseElement.cs
- GetFileNameResult.cs
- KeySpline.cs
- PeerNameRegistration.cs
- SplitterPanel.cs
- HttpListenerContext.cs
- RoutingService.cs
- SoapSchemaExporter.cs
- ResourceKey.cs
- InlineObject.cs
- SignatureToken.cs
- Hash.cs
- XmlRootAttribute.cs
- DivideByZeroException.cs
- XmlSchemaAttributeGroupRef.cs
- CategoryGridEntry.cs
- WpfMemberInvoker.cs
- TableCellAutomationPeer.cs
- LicFileLicenseProvider.cs
- DocumentSequence.cs
- ReadOnlyCollectionBase.cs
- RowUpdatedEventArgs.cs
- SHA384.cs
- GenericPrincipal.cs
- XmlQueryStaticData.cs
- FixedTextBuilder.cs
- CachedTypeface.cs
- ProxyHelper.cs
- ChannelToken.cs
- SqlVisitor.cs
- ListViewTableCell.cs
- SessionState.cs
- RootDesignerSerializerAttribute.cs
- Identifier.cs
- SafeBitVector32.cs
- DefaultAssemblyResolver.cs
- GreenMethods.cs
- PartialCachingAttribute.cs
- HeaderedContentControl.cs
- DataColumn.cs
- GridViewRowPresenterBase.cs
- HostTimeoutsElement.cs
- Win32.cs
- StylusPointPropertyInfoDefaults.cs
- SqlXml.cs
- PathGeometry.cs
- DescendantOverDescendantQuery.cs
- CharKeyFrameCollection.cs
- Privilege.cs
- Point4D.cs
- ADMembershipUser.cs
- FactoryId.cs
- AppPool.cs
- SerialErrors.cs
- FontCollection.cs
- ExtendedTransformFactory.cs
- XmlElement.cs
- dataSvcMapFileLoader.cs
- CallTemplateAction.cs
- ToolStripItemImageRenderEventArgs.cs
- RemotingServices.cs
- Metafile.cs
- XmlSchemaAttributeGroup.cs
- ToolStripContentPanel.cs
- WindowsAuthenticationModule.cs
- cookie.cs
- Mouse.cs
- UnknownWrapper.cs
- DeriveBytes.cs
- DependencyObjectType.cs
- Win32MouseDevice.cs
- ValidationPropertyAttribute.cs
- WebPartMenuStyle.cs
- TouchDevice.cs
- ApplicationSettingsBase.cs
- ContainerActivationHelper.cs
- SqlCommand.cs
- TypeInitializationException.cs