Browse Source
Merge pull request #1980 from donandren/issues/nestedmultibindings
Fix nested multibindings
pull/2009/head
Steven Kirk
8 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
32 additions and
1 deletions
-
src/Markup/Avalonia.Markup/Data/MultiBinding.cs
-
tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.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; |
|
|
|
|
|
|
|
|
|
|
|
@ -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() |
|
|
|
{ |
|
|
|
|