diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/EnumToEnumerable.cs b/tests/Avalonia.Markup.Xaml.UnitTests/EnumToEnumerable.cs
new file mode 100644
index 00000000000..c3c037a924f
--- /dev/null
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/EnumToEnumerable.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace Avalonia.Markup.Xaml.UnitTests
+{
+ public class EnumToEnumerable : MarkupExtension
+ {
+ private readonly Type _enumType;
+
+ public EnumToEnumerable(Type type)
+ {
+ if (!type.IsEnum)
+ throw new ArgumentException(nameof(type));
+ _enumType = type;
+ }
+
+ public override object ProvideValue(IServiceProvider serviceProvider)
+ {
+ return Enum.GetValues(_enumType);
+ }
+ }
+}
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/MarkupExtensionTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/MarkupExtensionTests.cs
new file mode 100644
index 00000000000..3af3d78a0a5
--- /dev/null
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/MarkupExtensionTests.cs
@@ -0,0 +1,32 @@
+using System.Collections;
+using Avalonia.Controls;
+using Avalonia.UnitTests;
+using Xunit;
+
+namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
+{
+ public class MarkupExtensionTests : XamlTestBase
+ {
+ [Fact]
+ public void Markup_Extension_Can_Accept_Nested_Type()
+ {
+ using (UnitTestApplication.Start(TestServices.MockWindowingPlatform))
+ {
+ var xaml = @"
+
+
+";
+
+ var window = AvaloniaRuntimeXamlLoader.Parse(xaml);
+ var listBox = (ListBox)window.Content;
+ var items = (IList)listBox.Items;
+
+ Assert.Equal(2, items.Count);
+ Assert.Equal(TestViewModel.NestedEnum.Item1, items[0]);
+ Assert.Equal(TestViewModel.NestedEnum.Item2, items[1]);
+ }
+ }
+ }
+}
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/TestViewModel.cs b/tests/Avalonia.Markup.Xaml.UnitTests/TestViewModel.cs
index 93232cd3552..a964f68c283 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/TestViewModel.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/TestViewModel.cs
@@ -37,5 +37,16 @@ public TestViewModel Child
RaisePropertyChanged();
}
}
+
+ public class NestedType
+ {
+ public string String { get; set; }
+ }
+
+ public enum NestedEnum
+ {
+ Item1,
+ Item2,
+ }
}
-}
\ No newline at end of file
+}
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs
index 53881467e79..0e619129a55 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs
@@ -1,5 +1,6 @@
using Avalonia.Controls;
using Avalonia.Controls.Presenters;
+using Avalonia.Markup.Xaml.Templates;
using Avalonia.UnitTests;
using Xunit;
@@ -132,5 +133,47 @@ public void Can_Set_DataContext_In_DataTemplate()
Assert.Same(viewModel.Child.Child, canvas.DataContext);
}
}
+
+ [Fact]
+ public void DataType_Can_Be_Nested_Type()
+ {
+ using (UnitTestApplication.Start(TestServices.StyledWindow))
+ {
+ var xaml = @"
+
+
+
+
+
+
+
+";
+ var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
+ var dataTemplate = (DataTemplate)window.DataTemplates[0];
+ var target = window.FindControl("target");
+
+ window.DataContext = new TestViewModel.NestedType
+ {
+ String = "Nested"
+ };
+
+ window.ApplyTemplate();
+ target.ApplyTemplate();
+ ((ContentPresenter)target.Presenter).UpdateChild();
+
+ Assert.Equal(typeof(TestViewModel.NestedType), dataTemplate.DataType);
+
+ var child = Assert.IsType(target.Presenter.Child);
+ Assert.Equal("Nested", child.Text);
+ Assert.Equal("NestedType", child.Tag);
+ }
+ }
+
+ public class NestedType
+ {
+ }
}
}