Browse Source

Do not require matching ctor, if top level element

pull/9637/head
Max Katz 3 years ago
parent
commit
bdceb1c3df
  1. 2
      src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs
  2. 2
      src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github
  3. 23
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs

2
src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs

@ -234,7 +234,7 @@ namespace Avalonia.Markup.Xaml.XamlIl
parsedDocuments.Add(new XamlDocumentResource(parsed, document.BaseUri?.ToString(), null, null,
builder,
compiler.DefinePopulateMethod(builder, parsed, AvaloniaXamlIlCompiler.PopulateName, true),
compiler.DefineBuildMethod(builder, parsed, AvaloniaXamlIlCompiler.BuildName, true)));
document.RootInstance is null ? compiler.DefineBuildMethod(builder, parsed, AvaloniaXamlIlCompiler.BuildName, true) : null));
originalDocuments.Add(document);
}

2
src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github

@ -1 +1 @@
Subproject commit 491de981dd4433ee58bc9540e2cd4a5d168f8168
Subproject commit b800d3e1fac0940c571bfa540e3af4dbd59f7dbb

23
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs

@ -899,6 +899,17 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
Assert.Equal("Foo", target.Text);
}
[Fact]
public void Should_Parse_And_Populate_Type_Without_Public_Ctor()
{
var xaml = @"<ObjectWithoutPublicCtor xmlns='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml' Test2='World' />";
var target = (ObjectWithoutPublicCtor)AvaloniaRuntimeXamlLoader.Load(xaml, rootInstance: new ObjectWithoutPublicCtor("Hello"));
Assert.NotNull(target);
Assert.Equal("World", target.Test2);
Assert.Equal("Hello", target.Test1);
}
private class SelectedItemsViewModel : INotifyPropertyChanged
{
public string[] Items { get; set; }
@ -928,6 +939,18 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
Child = child;
}
}
public class ObjectWithoutPublicCtor
{
public ObjectWithoutPublicCtor(string param)
{
Test1 = param;
}
public string Test1 { get; set; }
public string Test2 { get; set; }
}
public class ObjectWithAddChildOfT : IAddChild, IAddChild<string>
{

Loading…
Cancel
Save