예제 #1
0
        public static BindingPathLinkBase<object> GetPathLink(
           this ITypeResolver typeResolver,
           PathLinkInfo pathLink
        )
        {
            PropParams propParams = null;

            BindingPathLinkBase<object> result = GetPathLinkAndPropParams(typeResolver, pathLink, out propParams);

            return result;
        }
예제 #2
0
        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);
        }
예제 #3
0
        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;
            }
        }