Browse Source

Merge branch 'linq-expression-expressionobserver' into selector-parse-no-sprache

pull/1668/head
Jeremy Koritzinsky 8 years ago
parent
commit
8b1d3c232c
  1. 4
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs
  2. 5
      src/Markup/Avalonia.Markup/Markup/Parsers/ExpressionParser.cs

4
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
};
}

5
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));

Loading…
Cancel
Save