Пример #1
0
        public static bool CanBindToSchemaNode(SceneNode targetElement, IPropertyId targetPropertyId, DataSchemaNode schemaNode)
        {
            ReferenceStep referenceStep = targetElement.ProjectContext.ResolveProperty(targetPropertyId) as ReferenceStep;

            if (!BindingPropertyHelper.IsPropertyBindable(targetElement, referenceStep))
            {
                return(false);
            }
            IType dataType = schemaNode.ResolveType((ITypeResolver)targetElement.ProjectContext);

            if (dataType == null)
            {
                return(true);
            }
            return(BindingPropertyHelper.GetPropertyCompatibility((IProperty)referenceStep, dataType, (ITypeResolver)targetElement.ProjectContext) != BindingPropertyCompatibility.None);
        }
Пример #2
0
        private List <DataSchemaNode> GetNodesToCreateElements()
        {
            IPlatform             platform = this.DragModel.Platform;
            List <DataSchemaNode> list     = new List <DataSchemaNode>();
            bool             flag          = DataBindingModeModel.Instance.NormalizedMode == DataBindingMode.Default;
            DataViewCategory category      = flag ? DataViewCategory.Master : DataViewCategory.Details;

            if (flag && this.DragModel.DataSource.Count == 1 && this.DragModel.DataSource.PrimarySchemaNodePath.IsCollection)
            {
                DataSchemaNode collectionItemNode = this.DragModel.DataSource.PrimarySchemaNodePath.EffectiveCollectionItemNode;
                IType          type = collectionItemNode.ResolveType(this.DragModel.TargetNode.DocumentNode.TypeResolver);
                if (PlatformTypes.IConvertible.IsAssignableFrom((ITypeId)type) || PlatformTypes.ImageSource.IsAssignableFrom((ITypeId)type))
                {
                    list.Add(collectionItemNode);
                }
                else
                {
                    foreach (DataSchemaNode dataSchemaNode in collectionItemNode.Children)
                    {
                        IType dataType = dataSchemaNode.ResolveType(this.DragModel.TargetNode.DocumentNode.TypeResolver);
                        if (DataViewFactory.GetDataViewTemplateEntry(platform, dataType, category) != null)
                        {
                            list.Add(dataSchemaNode);
                        }
                    }
                }
            }
            else
            {
                for (int index = 0; index < this.DragModel.DataSource.Count; ++index)
                {
                    DataSchemaNodePath dataSchemaNodePath = this.DragModel.DataSource[index];
                    if (DataViewFactory.GetDataViewTemplateEntry(platform, dataSchemaNodePath.Type, category) != null)
                    {
                        list.Add(dataSchemaNodePath.Node);
                    }
                }
            }
            list.Sort((Comparison <DataSchemaNode>)((a, b) => StringLogicalComparer.Instance.Compare(a.PathName, b.PathName)));
            return(list);
        }