public static BindingPathLinkBase<object> GetPathLink( this ITypeResolver typeResolver, PathLinkInfo pathLink ) { PropParams propParams = null; BindingPathLinkBase<object> result = GetPathLinkAndPropParams(typeResolver, pathLink, out propParams); return result; }
public static BindingPathLinkBase<object> GetVisualPathLink(this ITypeResolver typeResolver, PathLinkInfo pathLink) { PropParams propParams = null; BindingPathLinkBase<object> result = PathResolver.GetPathLinkAndPropParams(typeResolver, pathLink, out propParams); if (result != null) return result; string fullStaticPropObjName = propParams.PropStr + "Property"; DependencyProperty dependencyProperty = (DependencyProperty)propParams.PropClassType.GetStaticFieldValue(fullStaticPropObjName); return new AttachedPropBindingPathLink<object>(dependencyProperty); }
public static BindingPathLinkBase<object> GetPathLinkAndPropParams( this ITypeResolver typeResolver, PathLinkInfo pathLink, out PropParams propParams ) { propParams = null; switch(pathLink.ThePropertyKind) { case PropertyKind.Plain: return new PlainPropBindingPathLink<object>(pathLink.LinkPath); case PropertyKind.Map: return new DynamicPropBindingPathLink<object>(pathLink.LinkPath); } string linkPath = pathLink.LinkPath; int propSeparatorIdx = linkPath.LastIndexOf(PROP_SEPARATOR); string propClassStr = linkPath.Substring(0, propSeparatorIdx); Type propClassType = typeResolver.Resolve(propClassStr); string propStr = linkPath.Substring(propSeparatorIdx + 1); propParams = new PropParams { PropClassType = propClassType, PropStr = propStr }; string fullStaticPropObjName = null; if (pathLink.ThePropertyKind == PropertyKind.AProperty) { fullStaticPropObjName = propStr + "AProp"; AProp aProp = (AProp)propClassType.GetStaticFieldValue(fullStaticPropObjName); return new APropBindingPathLink<object>(aProp); } else { return null; } }