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); }
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); }