From a955f73a3e15303aac3b34e892c3963b1594a7af Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Fri, 19 Oct 2018 01:43:23 +0300 Subject: [PATCH 1/2] failing unittest for nested multibinding --- .../Data/MultiBindingTests.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs index fb23a38cce..78c538d99d 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs @@ -41,6 +41,37 @@ namespace Avalonia.Markup.UnitTests.Data Assert.Equal("1,2,3", result); } + [Fact] + public async Task Nested_MultiBinding_Should_Be_Set_Up() + { + var source = new { A = 1, B = 2, C = 3 }; + var binding = new MultiBinding + { + Converter = new ConcatConverter(), + Bindings = + { + new Binding { Path = "A" }, + new MultiBinding + { + Converter = new ConcatConverter(), + Bindings = + { + new Binding { Path = "B"}, + new Binding { Path = "C"} + } + } + } + }; + + var target = new Mock().As(); + target.Setup(x => x.GetValue(Control.DataContextProperty)).Returns(source); + + var observable = binding.Initiate(target.Object, null).Observable; + var result = await observable.Take(1); + + Assert.Equal("1,2,3", result); + } + [Fact] public void Should_Return_FallbackValue_When_Converter_Returns_UnsetValue() { From 0a5329f6a361b937aa2589fdf1ca93691a2a1cf5 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Fri, 19 Oct 2018 01:47:22 +0300 Subject: [PATCH 2/2] fix nested multibinding work again --- src/Markup/Avalonia.Markup/Data/MultiBinding.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup/Data/MultiBinding.cs b/src/Markup/Avalonia.Markup/Data/MultiBinding.cs index 4c47ef32e0..4921b7c9d7 100644 --- a/src/Markup/Avalonia.Markup/Data/MultiBinding.cs +++ b/src/Markup/Avalonia.Markup/Data/MultiBinding.cs @@ -61,7 +61,7 @@ namespace Avalonia.Data var targetType = targetProperty?.PropertyType ?? typeof(object); var children = Bindings.Select(x => x.Initiate(target, null)); - var input = children.Select(x => x.Subject).CombineLatest().Select(x => ConvertValue(x, targetType)); + var input = children.Select(x => x.Observable).CombineLatest().Select(x => ConvertValue(x, targetType)); var mode = Mode == BindingMode.Default ? targetProperty?.GetMetadata(target.GetType()).DefaultBindingMode : Mode;