1 //----------------------------------------------------------------
2 // <copyright company="Microsoft Corporation">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 //----------------------------------------------------------------
7 namespace System.Activities.Presentation.Model
11 internal static class ModelItemHelper
13 internal static ModelEditingScope ModelItemBeginEdit(ModelTreeManager modelTreeManager, string description, bool shouldApplyChangesImmediately)
15 if (shouldApplyChangesImmediately && modelTreeManager.Context.Services.GetService<UndoEngine>().IsBookmarkInPlace)
17 throw FxTrace.Exception.AsError(new InvalidOperationException(SR.InvalidNestedModelItemBeginEditExceptionMessage));
20 EditingScope editingScope = modelTreeManager.CreateEditingScope(description, shouldApplyChangesImmediately);
22 if (shouldApplyChangesImmediately && editingScope == null)
24 throw FxTrace.Exception.AsError(new InvalidOperationException(SR.InvalidNestedModelItemBeginEditExceptionMessage));
30 internal static bool CanCreateImmediateEditingScope(ModelItem modelItem)
32 Fx.Assert(modelItem is IModelTreeItem, "modelItem must implement IModelTreeItem");
34 return ((IModelTreeItem)modelItem).ModelTreeManager.CanCreateImmediateEditingScope();
37 internal static void TryCreateImmediateEditingScopeAndExecute(EditingContext context, string editingScopeDescription, Action<EditingScope> modelEditingWork)
39 Fx.Assert(context != null, "context should not be null.");
40 Fx.Assert(modelEditingWork != null, "modelEditingWork should not be null.");
42 ModelTreeManager manager = context.Services.GetRequiredService<ModelTreeManager>();
44 if (manager.CanCreateImmediateEditingScope())
46 using (EditingScope editingScope = manager.CreateEditingScope(editingScopeDescription, true))
48 modelEditingWork(editingScope);
53 modelEditingWork(null);
57 internal static EditingScope TryCreateImmediateEditingScope(ModelTreeManager manager, string editingScopeDescription)
59 if (manager.CanCreateImmediateEditingScope())
61 return manager.CreateEditingScope(editingScopeDescription, true);