From 2be443a5c4c68316c0ef7fe13ea33754084ed357 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sat, 9 Jun 2018 22:42:20 -0500 Subject: [PATCH] Fix missing type resolver in TemplateBindingExtension. --- .../MarkupExtensions/TemplateBindingExtension.cs | 4 ++++ .../Avalonia.Markup/Markup/Parsers/ExpressionParser.cs | 5 +++++ 2 files changed, 9 insertions(+) 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 6919eeeb0d..95bb421777 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, owner), name); nodes.Add(new AvaloniaPropertyAccessorNode(property, _enableValidation));