using System.ComponentModel;
using System.Diagnostics;
using System.IO;
+using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Xml;
ExceptionHandler = doNotThrow ? e => { } : (Action<Exception>)null,
};
var cvv = new CreateValuesVisitor(visitorContext);
+
+ // Visit Parameter Properties to create instance from parameterized constructor
+ var type = XamlParser.GetElementType(rootnode.XmlType, rootnode, null, out XamlParseException xpe);
+ if (xpe != null)
+ throw xpe;
+
+ var ctorInfo =
+ type.GetTypeInfo()
+ .DeclaredConstructors.FirstOrDefault(
+ ci =>
+ ci.GetParameters().Length != 0 && ci.IsPublic &&
+ ci.GetParameters().All(pi => pi.CustomAttributes.Any(attr => attr.AttributeType == typeof(ParameterAttribute))));
+ if (ctorInfo != null)
+ {
+ foreach (var parameter in ctorInfo.GetParameters())
+ {
+ var propname =
+ parameter.CustomAttributes.First(ca => ca.AttributeType.FullName == "Tizen.NUI.Binding.ParameterAttribute")?
+ .ConstructorArguments.First()
+ .Value as string;
+
+ var name = new XmlName("", propname);
+ if (rootnode.Properties.TryGetValue(name, out INode node) && node is ValueNode)
+ {
+ node.Accept(cvv, rootnode);
+ }
+ }
+ }
+
+
cvv.Visit((ElementNode)rootnode, null);
inflatedView = rootnode.Root = visitorContext.Values[rootnode];
visitorContext.RootElement = inflatedView as BindableObject;
if (node != null)
{
IXamlTypeResolver = new XamlTypeResolver(node.NamespaceResolver, XamlParser.GetElementType,
- context?.RootElement.GetType().GetTypeInfo().Assembly);
+ context?.RootElement?.GetType().GetTypeInfo().Assembly);
Add(typeof(IReferenceProvider), new ReferenceProvider(node));
}