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)); } }
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); }
public override IEnumerable <IEvent> GetEvents(Predicate <IEvent> filter = null, GetMemberOptions options = GetMemberOptions.None) { return(UnderlyingType.GetEvents(filter, options)); }