ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Desktop.Core.Events Namespace / ProjectItemsChangedEventArgs Class / Action Property
Example Version

Action Property (ProjectItemsChangedEventArgs)
Gets the action associated with the event that was fired
Syntax
public NotifyCollectionChangedAction Action {get;}
Example
LayoutAdded_ProjectItemsChangedEvent_Add
//Report the event args when a layout is added.

//At 2.x - ArcGIS.Desktop.Layouts.Events.LayoutAddedEvent.Subscribe((args) =>
//{
//  System.Windows.MessageBox.Show("LayoutAddedEvent:" +
//    Environment.NewLine +
//    "   arg Layout: " + args.Layout.Name);
//});

//Use ProjectItemsChangedEvent at 3.x
ArcGIS.Desktop.Core.Events.ProjectItemsChangedEvent.Subscribe((args) => {
  //Layout added. Layout removed would be NotifyCollectionChangedAction.Remove
  if (args.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add &&
      args.ProjectItem is LayoutProjectItem layoutProjectItem)
  {
    var layout_name = layoutProjectItem.Name; 
    var layout = layoutProjectItem.GetLayout();
    System.Diagnostics.Debug.WriteLine($"Layout Added: {layout_name}");
  }
});
LayoutRemoved_ProjectItemsChangedEvent_Remove
//Report the event args when a layout is removed.

//At 2.x - ArcGIS.Desktop.Layouts.Events.LayoutRemovedEvent.Subscribe((args) =>
//{
//  System.Windows.MessageBox.Show("LayoutViewEvent:" +
//  Environment.NewLine +
//  "   arg Layout: " + args.Layout.Name);
//});

//Use ProjectItemsChangedEvent at 3.x
ArcGIS.Desktop.Core.Events.ProjectItemsChangedEvent.Subscribe((args) => {
  //Layout added. Layout removed would be NotifyCollectionChangedAction.Remove
  if (args.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove &&
      args.ProjectItem is LayoutProjectItem layoutProjectItem)
  {
    var layout_name = layoutProjectItem.Name;
    System.Diagnostics.Debug.WriteLine($"Layout Removed: {layout_name}");
  }
});
LayoutRemoved_ProjectItemsChangedEvent_Removing
//Report the event args when a layout is about to be removed.

//At 2.x - ArcGIS.Desktop.Layouts.Events.LayoutRemovingEvent.Subscribe((args) =>
//{
//  if (args.LayoutPath == "CIMPATH=layout.xml")
//  {
//    args.Cancel = true;
//  }
//  return Task.FromResult(0);
//});

//At 3.x use ProjectItemRemovingEvent
ArcGIS.Desktop.Core.Events.ProjectItemRemovingEvent.Subscribe((args) =>
{
  var layoutItems = args.ProjectItems.ToList().OfType<LayoutProjectItem>() ?? new List<LayoutProjectItem>();
  var layoutName = "DontDeleteThisOne";
  foreach(var layoutItem in layoutItems)
  {
    if (layoutItem.Name == layoutName)
    {
      args.Cancel = true;//Cancel the remove
      break;
    }
  }
  return Task.FromResult(0);
});
Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3 or higher.
See Also