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
- Verify the property exists on the concrete EventArgs type for the wired event and fix the path (exact casing).
- Use EventArgsConverter instead of EventArgsParameterPath when args types vary or the path is unreliable.
- Check each dot-separated segment matches a real property on the intermediate object.
- 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
- Confirm each dot-separated segment against the concrete EventArgs type
- Prefer EventArgsConverter for dynamic or platform-specific event args
- Add unit tests that raise the real event and exercise the parameter path
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
- No matching event ' ' on attached type
- Specified method is not supported.
- The Keyboard Type value
- Cannot destroy .
- The page type ' ' is not supported.
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)