using System; using System.Collections.Generic; using System.Globalization; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Converters { public class MultiValueConverterTests : XamlTestBase { [Fact] public void MultiValueConverter_Special_Values_Work() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = window.FindControl("textBlock"); window.ApplyTemplate(); window.DataContext = Tuple.Create(2, 2); Assert.Equal("foo", textBlock.Tag); window.DataContext = Tuple.Create(-3, 3); Assert.Equal("foo", textBlock.Tag); window.DataContext = Tuple.Create(0, 2); Assert.Equal("bar", textBlock.Tag); } } } public class TestMultiValueConverter : IMultiValueConverter { public static readonly TestMultiValueConverter Instance = new TestMultiValueConverter(); public object Convert(IList values, Type targetType, object parameter, CultureInfo culture) { if (values[0] is int i && values[1] is int j) { var p = i * j; if (p > 0) { return "foo"; } if (p == 0) { return AvaloniaProperty.UnsetValue; } return BindingOperations.DoNothing; } return "(default)"; } } }