コード例 #1
0
        public IBindingDefinition CreateRealBindingDefinition(Type type)
        {
            IBindingDefinition definition;

            if (!bindingDefinitionByType.TryGetValue(type, out definition))
            {
                definition = BindingDefinitionFactory.CreateInstance(type, DefinitionDescription) ?? this;
                bindingDefinitionByType[type] = definition;
            }
            return(definition);
        }
コード例 #2
0
        public static BindingDefinitionHierarchical CreateInstance(Type type, BindingDefinitionDescription definitionDescription)
        {
            try
            {
                if (string.IsNullOrEmpty(definitionDescription.Name))
                {
                    definitionDescription.Name = definitionDescription.BindingExpression.Replace('.', '_');
                }

                BindingDefinitionHierarchical definition = new BindingDefinitionHierarchical(definitionDescription);

                string realBindingDefinitionExpression = definitionDescription.BindingExpression.Split('.')[0];

                BindingDefinitionDescription realBindingDefinitionDescription = new BindingDefinitionDescription()
                {
                    BindingExpression = realBindingDefinitionExpression, IsReadOnly = definitionDescription.IsReadOnly
                };
                definition.realBindingDefinition = BindingDefinitionFactory.CreateInstance(type, realBindingDefinitionDescription);

                string childBindingExpression = definitionDescription.BindingExpression.Substring(realBindingDefinitionExpression.Length + 1);
                BindingDefinitionDescription childBindingDescription = new BindingDefinitionDescription()
                {
                    BindingExpression = childBindingExpression, IsReadOnly = definitionDescription.IsReadOnly
                };
                definition.childBindingDefinition = BindingDefinitionFactory.CreateInstance(definition.realBindingDefinition.BindingType, childBindingDescription);

                definition.CanNotify = definition.childBindingDefinition.CanNotify;

                definition.BindingType = definition.childBindingDefinition.BindingType; // type;
                return(definition);
            }
            catch (Exception ex)
            {
                throw new BindingTemplateException($"Cannot create the 'Hierarchical BindingDefinition' '{definitionDescription.BindingExpression}'. {ex.Message}");
            }
        }