internal static ILRootNode ParseXaml(Stream stream, TypeReference typeReference) { ILRootNode rootnode = null; using (var reader = XmlReader.Create(stream)) { while (reader.Read()) { //Skip until element if (reader.NodeType == XmlNodeType.Whitespace) { continue; } if (reader.NodeType != XmlNodeType.Element) { Debug.WriteLine("Unhandled node {0} {1} {2}", reader.NodeType, reader.Name, reader.Value); continue; } XamlParser.ParseXaml( rootnode = new ILRootNode(new XmlType(reader.NamespaceURI, reader.Name, null), typeReference, reader as IXmlNamespaceResolver, ((IXmlLineInfo)reader).LineNumber, ((IXmlLineInfo)reader).LinePosition), reader); break; } } return(rootnode); }
public override void Bind(string xaml) { XamlParser parser = new XamlParser(xaml); parser.ParseXaml(); FieldInfo[] fields = _container.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (FieldInfo field in fields) { object fieldValue = field.GetValue(_container); Logger.GetInstance().WriteLine("------- " + field.Name + field.FieldType); //Logger.GetInstance().WriteLine(" INTER " + field.FieldType.GetInterfaces()[0].ToString()); if (fieldValue is IBindableWidget) { IBindableWidget widget = (IBindableWidget) fieldValue; //Logger.GetInstance().WriteLine(" ** widget ** " + widget); //widget.WidgetCore.BindObject(_bindable, xxx, yyy, BindingOptions.TwoWay); Logger.GetInstance().WriteLine(_container.Name); try { BindingMetadata metadata = parser.MetadataIndexer[field.Name]; Logger.GetInstance().WriteLine(metadata.WidgetName + "," + metadata.BindingPath); widget.WidgetCore.BindObject(_bindable, metadata.BindingPath, metadata.WidgetBindingProperty, metadata.BindingOptions); } catch (KeyNotFoundException) { Logger.GetInstance().WriteLine("The field " + field.Name + "does not have any binding metadata"); } } } }