{"record":{"id":"e737cf22df861882","repo":"dotnet/maui","slug":"unhandled-binding-type-0-e737cf","errorCode":null,"errorMessage":"Unhandled binding type '{0}'","messagePattern":"Unhandled binding type '(.+?)'","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Compatibility/Core/src/Windows/WindowsExpressionSearch.cs","lineNumber":137,"sourceCode":"\t\t\t\t\tthrow new ArgumentException(string.Format(\"Unhandled expression type: '{0}'\", expression.NodeType));\n\t\t\t}\n\t\t}\n\n\t\tvoid VisitBinding(MemberBinding binding)\n\t\t{\n\t\t\tswitch (binding.BindingType)\n\t\t\t{\n\t\t\t\tcase MemberBindingType.Assignment:\n\t\t\t\t\tVisit(((MemberAssignment)binding).Expression);\n\t\t\t\t\tbreak;\n\t\t\t\tcase MemberBindingType.MemberBinding:\n\t\t\t\t\tVisitList(((MemberMemberBinding)binding).Bindings, VisitBinding);\n\t\t\t\t\tbreak;\n\t\t\t\tcase MemberBindingType.ListBinding:\n\t\t\t\t\tVisitList(((MemberListBinding)binding).Initializers, initializer => VisitList(initializer.Arguments, Visit));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ArgumentException(string.Format(\"Unhandled binding type '{0}'\", binding.BindingType));\n\t\t\t}\n\t\t}\n\n\t\tstatic void VisitList<TList>(IEnumerable<TList> list, Action<TList> visitor)\n\t\t{\n\t\t\tforeach (TList element in list)\n\t\t\t{\n\t\t\t\tvisitor(element);\n\t\t\t}\n\t\t}\n\n\t\t// All important magic happens here\n\t\tvoid VisitMemberAccess(MemberExpression member)\n\t\t{\n\t\t\tif (member.Expression is ConstantExpression && member.Member is FieldInfo)\n\t\t\t{\n\t\t\t\tobject container = ((ConstantExpression)member.Expression).Value;\n\t\t\t\tobject value = ((FieldInfo)member.Member).GetValue(container);","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/dotnet/maui/blob/f377ff1c5ee04d334d8a925f50c83a6b7afddf03/src/Compatibility/Core/src/Windows/WindowsExpressionSearch.cs#L119-L155","documentation":"WindowsExpressionSearch.VisitBinding throws ArgumentException for MemberBinding types not handled in its switch. Only Assignment, MemberBinding (nested), and ListBinding are handled. Any other MemberBindingType value triggers the exception.","triggerScenarios":"An expression tree with member initialization containing an unsupported binding type passed through the expression search. This occurs when data bindings reference complex member initialization expressions.","commonSituations":"Complex object initialization in binding expressions; lambda-based bindings that construct new objects with member initializers; expression-based binding definitions with unusual shapes.","solutions":["Simplify binding expressions to avoid member initialization constructs","Pre-construct objects in the ViewModel rather than in binding expressions","Use simpler property-access-only binding paths"],"exampleFix":"// before — member init with unsupported binding type\nSetBinding(ItemProperty, new Binding(() => new Item { Name = name }));\n\n// after — bind to pre-constructed property\nSetBinding(ItemProperty, new Binding(nameof(ViewModel.PreBuiltItem)));","handlingStrategy":"try-catch","validationCode":"// Before using member initialization in bindings, verify binding types are supported\nstatic bool HasSupportedBindings(MemberInitExpression init)\n{\n    return init.Bindings.All(b =>\n        b.BindingType == MemberBindingType.Assignment\n        || b.BindingType == MemberBindingType.MemberBinding\n        || b.BindingType == MemberBindingType.ListBinding);\n}","typeGuard":null,"tryCatchPattern":"try\n{\n    SetBinding(MyProperty, new Binding(() => new Item { Name = name }));\n}\ncatch (ArgumentException ex) when (ex.Message.Contains(\"Unhandled binding type\"))\n{\n    // Fall back to pre-constructed object binding\n    SetBinding(MyProperty, new Binding(nameof(ViewModel.PreBuiltItem)));\n}","preventionTips":["Avoid member initialization expressions in data bindings","Pre-construct objects in ViewModels instead of using initializer syntax in bindings","Keep binding expressions to simple property paths","Test expression-based bindings on Windows where the visitor is most restrictive"],"tags":["expression-trees","data-binding","winui","internal"],"backgroundTag":null,"analyzedSha":"f377ff1c5ee04d334d8a925f50c83a6b7afddf03","analyzedAt":"2026-08-13T14:26:18.069Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}