diff --git a/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs b/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs index 9a5aa41e1f..fab9bdbf55 100644 --- a/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs +++ b/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs @@ -100,7 +100,9 @@ namespace Avalonia.Data CultureInfo.CurrentCulture); } - _target.TemplatedParent.SetValue(Property, value, BindingPriority.TemplatedParent); + // Use LocalValue priority here, as TemplatedParent doesn't make sense on controls + // that aren't template children. + _target.TemplatedParent.SetValue(Property, value, BindingPriority.LocalValue); } } @@ -171,7 +173,7 @@ namespace Avalonia.Data { if (e.Property == Property) { - PublishNext(_target.TemplatedParent.GetValue(Property)); + PublishValue(); } } } diff --git a/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs new file mode 100644 index 0000000000..ef3864abd7 --- /dev/null +++ b/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs @@ -0,0 +1,124 @@ +using System; +using System.Globalization; +using System.Linq; +using Avalonia.Controls; +using Avalonia.Controls.Presenters; +using Avalonia.Controls.Templates; +using Avalonia.Data; +using Avalonia.Data.Converters; +using Avalonia.VisualTree; +using Xunit; + +namespace Avalonia.Markup.UnitTests.Data +{ + public class TemplateBindingTests + { + [Fact] + public void OneWay_Binding_Should_Be_Set_Up() + { + var source = new Button + { + Template = new FuncControlTemplate