diff --git a/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs b/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs index c8fc8a41d1..e033762d0d 100644 --- a/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs +++ b/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs @@ -6,8 +6,10 @@ using Avalonia.Data; namespace Avalonia.Markup.Xaml.MarkupExtensions { using System; + using System.ComponentModel; using Avalonia.Data.Converters; using Avalonia.Markup.Data; + using Portable.Xaml.ComponentModel; using Portable.Xaml.Markup; [MarkupExtensionReturnType(typeof(IBinding))] @@ -24,6 +26,7 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions public override object ProvideValue(IServiceProvider serviceProvider) { + var context = (ITypeDescriptorContext)serviceProvider; return new Binding { Converter = Converter, @@ -32,6 +35,7 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent), Path = Path ?? string.Empty, Priority = Priority, + TypeResolver = context.ResolveType }; } diff --git a/src/Markup/Avalonia.Markup/Markup/Parsers/ExpressionParser.cs b/src/Markup/Avalonia.Markup/Markup/Parsers/ExpressionParser.cs index bb22046053..3761387e6e 100644 --- a/src/Markup/Avalonia.Markup/Markup/Parsers/ExpressionParser.cs +++ b/src/Markup/Avalonia.Markup/Markup/Parsers/ExpressionParser.cs @@ -160,6 +160,11 @@ namespace Avalonia.Markup.Parsers throw new ExpressionParseException(r.Position, "Expected ')'."); } + if (_typeResolver == null) + { + throw new InvalidOperationException("Cannot parse a binding path with an attached property without a type resolver. Maybe you can use a LINQ Expression binding path instead?"); + } + var property = AvaloniaPropertyRegistry.Instance.FindRegistered(_typeResolver(ns.ToString(), owner.ToString()), name.ToString()); nodes.Add(new AvaloniaPropertyAccessorNode(property, _enableValidation));