PrismLibrary/Prism · error · InvalidOperationException

Resources.RegionBehaviorAttachCannotBeCallWithNullRegion

Error message

Resources.RegionBehaviorAttachCannotBeCallWithNullRegion

What it means

InvalidOperationException in RegionBehavior.Attach: Attach() was called before the Region property was assigned a region. A behavior cannot attach to nothing — it needs the region instance to hook into — so attaching while this.region is null throws with the RegionBehaviorAttachCannotBeCallWithNullRegion resource message. Ensure Region is set (typically via RegionBehaviorCollection.Add) before calling Attach.

Solutions

  1. Set the Region property before calling Attach()
  2. Prefer adding the behavior to the region's RegionBehaviorCollection, which sets Region and calls Attach
  3. Guard: if (behavior.Region == null) behavior.Region = region;

Example fix

// before
var b = new MyBehavior();
b.Attach(); // Region never set
// after
var b = new MyBehavior { Region = region };
b.Attach();
Defensive patterns

Strategy: validation

Validate before calling

if (behavior.Region == null) behavior.Region = region; behavior.Attach();

Type guard

bool ReadyToAttach(IRegionBehavior b) => b.Region != null && !b.IsAttached;

Try / catch

try { behavior.Attach(); } catch (InvalidOperationException) { /* set Region first */ }

Prevention

When it happens

Trigger: Calling behavior.Attach() directly without first assigning behavior.Region = someRegion.

Common situations: Manually wiring behaviors in a custom IRegionAdapter and forgetting the Region assignment; constructing a behavior in code and attaching immediately.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of PrismLibrary/Prism@358118cd64 (2026-09-15). Data as JSON: /api/errors/e2631ff3298e6739. Report an issue: GitHub.

Appendix: source

Thrown at src/Prism.Core/Navigation/Regions/RegionBehavior.cs:45

                }

                this.region = value;
            }
        }

        /// <summary>
        /// Returns <see langword="true"/> if the behavior is attached to a region, <see langword="false"/> otherwise.
        /// </summary>
        public bool IsAttached { get; private set; }

        /// <summary>
        /// Attaches the behavior to the region.
        /// </summary>
        public void Attach()
        {
            if (this.region == null)
            {
                throw new InvalidOperationException(Resources.RegionBehaviorAttachCannotBeCallWithNullRegion);
            }

            IsAttached = true;
            OnAttach();
        }

        /// <summary>
        /// Override this method to perform the logic after the behavior has been attached.
        /// </summary>
        protected abstract void OnAttach();
    }
}

View on GitHub (pinned to 358118cd64)