PrismLibrary/Prism · error · MissingMemberException

Unable to find

Error message

Unable to find {EventArgsParameterPath}

What it means

EventToCommandBehavior can extract a command parameter from the event args by walking the property path in EventArgsParameterPath (dot-separated). If reflection cannot find a property for one path segment on the event args object, it throws MissingMemberException 'Unable to find {EventArgsParameterPath}'.

Solutions

  1. Verify the property exists on the concrete EventArgs type for the wired event and fix the path (exact casing).
  2. Use EventArgsConverter instead of EventArgsParameterPath when args types vary or the path is unreliable.
  3. Check each dot-separated segment matches a real property on the intermediate object.
  4. If the event args can differ by platform, use a converter with type checks.

Example fix

<!-- before -->
<prism:EventToCommandBehavior EventName="ItemTapped" EventArgsParameterPath="Selected.Item" />
<!-- after -->
<prism:EventToCommandBehavior EventName="ItemTapped" EventArgsParameterPath="Item" />
Defensive patterns

Strategy: validation

Validate before calling

var args = someEventArgs;
foreach (var part in EventArgsParameterPath.Split('.'))
    if (args?.GetType().GetRuntimeProperty(part) is null)
        throw new ArgumentException($"Property path '{EventArgsParameterPath}' invalid for {args?.GetType().Name}");

Type guard

bool PathExists(object o, string path) => path.Split('.').All(p => (o = o?.GetType().GetRuntimeProperty(p)?.GetValue(o)) != null);

Try / catch

try { /* raise event through behavior */ }
catch (MissingMemberException ex) when (ex.Message.Contains("EventArgsParameterPath")) { /* fix path or use converter */ }

Prevention

When it happens

Trigger: Setting EventArgsParameterPath to a property path that doesn't exist on the actual event args runtime type — e.g. "SelectedItem" when the args type has no such property, or a multi-segment path like "Item.Name" where an intermediate segment is wrong.

Common situations: Path written for one event args type but the event changed (e.g. TappedEventArgs vs ItemTappedEventArgs); platform-specific args types lacking the property; typos or casing differences in the path.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at src/Maui/Prism.Maui/Behaviors/EventToCommandBehavior.cs:226

    protected virtual void OnEventRaised(object sender, EventArgs eventArgs)
    {
        if (Command == null)
        {
            return;
        }

        var parameter = CommandParameter;

        if (parameter == null && !string.IsNullOrEmpty(EventArgsParameterPath))
        {
            //Walk the ParameterPath for nested properties.
            var propertyPathParts = EventArgsParameterPath.Split('.');
            object propertyValue = eventArgs;
            foreach (var propertyPathPart in propertyPathParts)
            {
                var propInfo = propertyValue.GetType().GetRuntimeProperty(propertyPathPart);
                if (propInfo == null)
                    throw new MissingMemberException($"Unable to find {EventArgsParameterPath}");

                propertyValue = propInfo.GetValue(propertyValue);
                if (propertyValue == null)
                {
                    break;
                }
            }
            parameter = propertyValue;
        }

        if (parameter == null && eventArgs != null && EventArgsConverter != null)
        {
            parameter = EventArgsConverter.Convert(eventArgs, typeof(object), EventArgsConverterParameter,
                CultureInfo.CurrentUICulture);
        }

        if (Command.CanExecute(parameter))
        {

View on GitHub (pinned to 358118cd64)