Esempio n. 1
0
        IEnumerable <XamlMember> DoLookupAllMembers()
        {
            // This is a hack that is likely required due to internal implementation difference in System.Uri. Our Uri has two readonly collection properties
            if (this == XamlLanguage.Uri)
            {
                yield break;
            }

            var bf = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

            foreach (var pi in UnderlyingType.GetProperties(bf))
            {
                if (pi.Name.Contains("."))                  // exclude explicit interface implementations.
                {
                    continue;
                }
                if (pi.CanRead && (pi.CanWrite || IsCollectionType(pi.PropertyType) || typeof(IXmlSerializable).IsAssignableFrom(pi.PropertyType)) && pi.GetIndexParameters().Length == 0)
                {
                    yield return(new XamlMember(pi, SchemaContext));
                }
            }
            foreach (var ei in UnderlyingType.GetEvents(bf))
            {
                yield return(new XamlMember(ei, SchemaContext));
            }
        }
Esempio n. 2
0
        internal void LookupAllMembers(out ICollection <PropertyInfo> newProperties,
                                       out ICollection <EventInfo> newEvents, out List <XamlMember> knownMembers)
        {
            Debug.Assert(UnderlyingType != null, "Caller should check for UnderlyingType == null");
            Debug.Assert(_nonAttachableMemberCache != null, "Members property should have been invoked before this");

            PropertyInfo[] propList  = UnderlyingType.GetProperties(AllProperties_BF);
            EventInfo[]    eventList = UnderlyingType.GetEvents(AllProperties_BF);
            knownMembers  = new List <XamlMember>(propList.Length + eventList.Length);
            newProperties = FilterProperties(propList, knownMembers, true);
            newEvents     = FilterEvents(eventList, knownMembers);
        }
Esempio n. 3
0
 public override IEnumerable <IEvent> GetEvents(Predicate <IEvent> filter = null, GetMemberOptions options = GetMemberOptions.None)
 {
     return(UnderlyingType.GetEvents(filter, options));
 }