コード例 #1
0
        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);
        }
コード例 #2
0
        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");
                    }
                }
            }
        }