Browse Source

Merge pull request #1980 from donandren/issues/nestedmultibindings

Fix nested multibindings
pull/2009/head
Steven Kirk 8 years ago
committed by GitHub
parent
commit
9c9596f112
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/Markup/Avalonia.Markup/Data/MultiBinding.cs
  2. 31
      tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs

2
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;

31
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<IAvaloniaObject>().As<IControl>();
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()
{

Loading…
Cancel
Save