Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Model / GenericArgumentsUpdater.cs / 1305376 / GenericArgumentsUpdater.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System; using System.Activities; using System.Diagnostics; using System.Linq; using System.Runtime; using System.Activities.Presentation.View; using System.Windows.Threading; class GenericArgumentUpdater { EditingContext context; const string TypeArgumentPropertyName = "TypeArgument"; public GenericArgumentUpdater(EditingContext context) { this.context = context; } public void AddSupportForUpdatingTypeArgument(Type modelItemType) { AttachedPropertytypeArgumentProperty = new AttachedProperty { Name = TypeArgumentPropertyName, OwnerType = modelItemType, Getter = (modelItem) => GetTypeArgument(modelItem), Setter = (modelItem, value) => UpdateTypeArgument(modelItem, value), IsBrowsable = true }; this.context.Services.GetService ().AddProperty(typeArgumentProperty); } private static void UpdateTypeArgument(ModelItem modelItem, Type value) { Type oldModelItemType = modelItem.ItemType; Fx.Assert(oldModelItemType.GetGenericArguments().Count() == 1, "we only support changing a single type parameter ?"); Type newModelItemType = oldModelItemType.GetGenericTypeDefinition().MakeGenericType(value); Fx.Assert(newModelItemType != null, "New model item type needs to be non null or we cannot proceed further"); ModelItem newModelItem = ModelFactory.CreateItem(modelItem.GetEditingContext(), Activator.CreateInstance(newModelItemType)); MorphHelper.MorphObject(modelItem, newModelItem); MorphHelper.MorphProperties(modelItem, newModelItem); if (oldModelItemType.IsSubclassOf(typeof(Activity)) && newModelItemType.IsSubclassOf(typeof(Activity))) { if (string.Equals((string)modelItem.Properties["DisplayName"].ComputedValue, GetActivityDefaultName(oldModelItemType), StringComparison.Ordinal)) { newModelItem.Properties["DisplayName"].SetValue(GetActivityDefaultName(newModelItemType)); } } DesignerView designerView = modelItem.GetEditingContext().Services.GetService (); if (designerView != null) { Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Render, (Action)(() => { if (designerView.RootDesigner != null && ((WorkflowViewElement)designerView.RootDesigner).ModelItem == modelItem) { designerView.MakeRootDesigner(newModelItem, true); } Selection.SelectOnly(modelItem.GetEditingContext(), newModelItem); })); } } private static Type GetTypeArgument(ModelItem modelItem) { Fx.Assert(modelItem.ItemType.GetGenericArguments().Count() == 1, "we only support changing a single type parameter ?"); return modelItem.ItemType.GetGenericArguments()[0]; } private static string GetActivityDefaultName(Type activityType) { Fx.Assert(activityType.IsSubclassOf(typeof(Activity)), "activityType is not a subclass of System.Activities.Activity"); Activity activity = (Activity)Activator.CreateInstance(activityType); return activity.DisplayName; } } } // 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
- Line.cs
- Regex.cs
- SchemaMapping.cs
- ReferenceService.cs
- XmlMembersMapping.cs
- PropertyEntry.cs
- XmlIgnoreAttribute.cs
- WebScriptMetadataInstanceContextProvider.cs
- newinstructionaction.cs
- QueueProcessor.cs
- RoleManagerSection.cs
- ControlEvent.cs
- VersionPair.cs
- Metafile.cs
- CanonicalXml.cs
- XmlComment.cs
- RegionData.cs
- Rectangle.cs
- DataSourceControl.cs
- SqlTopReducer.cs
- UnsafeNativeMethods.cs
- CommandHelpers.cs
- EffectiveValueEntry.cs
- SoapSchemaImporter.cs
- OciEnlistContext.cs
- CodeSnippetTypeMember.cs
- LiteralControl.cs
- RemoteHelper.cs
- FormViewDesigner.cs
- TableAutomationPeer.cs
- CallTemplateAction.cs
- BaseCollection.cs
- HttpValueCollection.cs
- StdValidatorsAndConverters.cs
- HttpListenerException.cs
- DataGridViewCellValueEventArgs.cs
- DataPagerFieldCollection.cs
- JsonEncodingStreamWrapper.cs
- MruCache.cs
- DateTimePicker.cs
- ViewPort3D.cs
- XmlCharCheckingReader.cs
- XmlSchemaExternal.cs
- DiscoveryEndpoint.cs
- LayoutTableCell.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- EventLogPermission.cs
- CustomCategoryAttribute.cs
- NTAccount.cs
- CriticalHandle.cs
- Pen.cs
- DesignerDataColumn.cs
- ProcessProtocolHandler.cs
- StylusTip.cs
- ServiceOperation.cs
- DllNotFoundException.cs
- TransformDescriptor.cs
- TableItemStyle.cs
- EntitySqlQueryCacheEntry.cs
- ScrollViewerAutomationPeer.cs
- BadImageFormatException.cs
- WebPartTransformer.cs
- EditingScope.cs
- TimeoutException.cs
- CodeGeneratorOptions.cs
- AttributeUsageAttribute.cs
- CacheForPrimitiveTypes.cs
- XmlSchemaChoice.cs
- HwndTarget.cs
- TreeViewImageIndexConverter.cs
- CreateUserWizard.cs
- Metafile.cs
- StorageComplexPropertyMapping.cs
- PropertyManager.cs
- SerialPinChanges.cs
- ObjectQuery.cs
- DataStreams.cs
- ColorConverter.cs
- InvalidAsynchronousStateException.cs
- ClientScriptManager.cs
- StructuredCompositeActivityDesigner.cs
- OutputCacheEntry.cs
- LoginCancelEventArgs.cs
- SingletonInstanceContextProvider.cs
- MonthCalendar.cs
- SerializableAuthorizationContext.cs
- ADConnectionHelper.cs
- AuthenticationModuleElement.cs
- HostedImpersonationContext.cs
- TimeEnumHelper.cs
- XPathBuilder.cs
- ISCIIEncoding.cs
- CharEntityEncoderFallback.cs
- DependencyPropertyHelper.cs
- MetadataWorkspace.cs
- ComplexObject.cs
- ScriptComponentDescriptor.cs
- Scene3D.cs
- InputReferenceExpression.cs
- WaitingCursor.cs