private static void UpdateTypeArgument(ModelItem modelItem, Int32 argumentIndex, Type newGenericType) { Type itemType = modelItem.ItemType; Type[] genericTypes = itemType.GetGenericArguments(); // Replace the type being changed genericTypes[argumentIndex] = newGenericType; Type newType = itemType.GetGenericTypeDefinition().MakeGenericType(genericTypes); EditingContext editingContext = modelItem.GetEditingContext(); Object instanceOfNewType = Activator.CreateInstance(newType); ModelItem newModelItem = ModelFactory.CreateItem(editingContext, instanceOfNewType); using (ModelEditingScope editingScope = newModelItem.BeginEdit("Change type argument")) { MorphHelper.MorphObject(modelItem, newModelItem); MorphHelper.MorphProperties(modelItem, newModelItem); if (itemType.IsSubclassOf(typeof(Activity)) && newType.IsSubclassOf(typeof(Activity))) { if (DisplayNameRequiresUpdate(modelItem)) { // Update to the new display name String newDisplayName = GetActivityDefaultName(newType); newModelItem.Properties[DisplayName].SetValue(newDisplayName); } } DesignerUpdater.UpdateModelItem(modelItem, newModelItem); editingScope.Complete(); } }
public static void UpdateModelItem(ModelItem originalItem, ModelItem updatedItem) { DesignerUpdater class2 = new DesignerUpdater(originalItem, updatedItem); Action method = class2.UpdateDesigner; Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Render, method); }