Browse Source

Merge pull request #4532 from jp2masa/compiled-bindings-fixes

Fixed TreeDataTemplate.ItemsSource for compiled bindings
pull/4561/head
danwalmsley 6 years ago
committed by GitHub
parent
commit
7a66cc0f50
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/Markup/Avalonia.Markup.Xaml/ApiCompatBaseline.txt
  2. 12
      src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs

4
src/Markup/Avalonia.Markup.Xaml/ApiCompatBaseline.txt

@ -0,0 +1,4 @@
Compat issues with assembly Avalonia.Markup.Xaml:
MembersMustExist : Member 'public Avalonia.Data.Binding Avalonia.Markup.Xaml.Templates.TreeDataTemplate.ItemsSource.get()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'public void Avalonia.Markup.Xaml.Templates.TreeDataTemplate.ItemsSource.set(Avalonia.Data.Binding)' does not exist in the implementation but it does exist in the contract.
Total Issues: 2

12
src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs

@ -2,7 +2,9 @@ using System;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using Avalonia.Data;
using Avalonia.Data.Core;
using Avalonia.Markup.Parsers;
using Avalonia.Markup.Xaml.MarkupExtensions;
using Avalonia.Metadata;
namespace Avalonia.Markup.Xaml.Templates
@ -16,7 +18,7 @@ namespace Avalonia.Markup.Xaml.Templates
public object Content { get; set; }
[AssignBinding]
public Binding ItemsSource { get; set; }
public BindingBase ItemsSource { get; set; }
public bool Match(object data)
{
@ -34,7 +36,13 @@ namespace Avalonia.Markup.Xaml.Templates
{
if (ItemsSource != null)
{
var obs = ExpressionObserverBuilder.Build(item, ItemsSource.Path);
var obs = ItemsSource switch
{
Binding reflection => ExpressionObserverBuilder.Build(item, reflection.Path),
CompiledBindingExtension compiled => new ExpressionObserver(item, compiled.Path.BuildExpression(false)),
_ => throw new InvalidOperationException("TreeDataTemplate currently only supports Binding and CompiledBindingExtension!")
};
return InstancedBinding.OneWay(obs, BindingPriority.Style);
}

Loading…
Cancel
Save