public override bool CanHandle() { if (this.DragModel.DataSource.FindIndex((Predicate <DataSchemaNodePath>)(schemaPath => { if (schemaPath.IsMethod) { return(true); } if (schemaPath.IsProperty) { return(PlatformTypes.ICommand.IsAssignableFrom((ITypeId)schemaPath.Type)); } return(false); })) < 0) { return(false); } if (this.DragModel.DataSource.Count == 1) { DataSchemaNodePath primarySchemaNodePath = this.DragModel.DataSource.PrimarySchemaNodePath; if (primarySchemaNodePath.IsProperty) { BindingPropertyMatchInfo bindingPropertyInfo = BindingPropertyHelper.GetDefaultBindingPropertyInfo(this.DragModel.TargetNode, primarySchemaNodePath.Type); if (bindingPropertyInfo.Property != null && bindingPropertyInfo.Compatibility == BindingPropertyCompatibility.Assignable) { return(false); } } } if (!this.UpdateDragModelInternal()) { this.DragModel.DropFlags = DataBindingDragDropFlags.None; } return(this.DragModel.DropFlags != DataBindingDragDropFlags.None); }
private IProperty GetDefaultBindingProperty(DataBindingDragDropFlags filteredDragFlags, IType dataType) { if (dataType == null) { return((IProperty)null); } BindingPropertyMatchInfo bindingPropertyInfo = BindingPropertyHelper.GetDefaultBindingPropertyInfo(this.DragModel.TargetNode, dataType); if (bindingPropertyInfo.Property == null) { return((IProperty)null); } if (bindingPropertyInfo.Compatibility == BindingPropertyCompatibility.StringSpecial && !PlatformTypes.IConvertible.IsAssignableFrom((ITypeId)dataType)) { return((IProperty)null); } if (bindingPropertyInfo.Compatibility == BindingPropertyCompatibility.DataContext) { if ((filteredDragFlags & DataBindingDragDropFlags.DiscourageDataContext) == DataBindingDragDropFlags.DiscourageDataContext) { return((IProperty)null); } SceneElement sceneElement = this.DragModel.TargetNode as SceneElement; if (sceneElement == null) { return((IProperty)null); } if (!sceneElement.IsContainer && !PlatformTypes.UserControl.IsAssignableFrom((ITypeId)sceneElement.Type) && (sceneElement.Parent != null && !PlatformTypes.FrameworkTemplate.IsAssignableFrom((ITypeId)sceneElement.Parent.Type))) { return((IProperty)null); } if (PlatformTypes.IConvertible.IsAssignableFrom((ITypeId)dataType)) { return((IProperty)null); } } if (bindingPropertyInfo.Compatibility == BindingPropertyCompatibility.Assignable && bindingPropertyInfo.Property.PropertyType.RuntimeType == typeof(object) && !PlatformTypes.IConvertible.IsAssignableFrom((ITypeId)dataType)) { return((IProperty)null); } if (PlatformTypes.IEnumerable.IsAssignableFrom((ITypeId)bindingPropertyInfo.Property.PropertyType) && !PlatformTypes.String.IsAssignableFrom((ITypeId)bindingPropertyInfo.Property.PropertyType) && PlatformTypes.String.IsAssignableFrom((ITypeId)dataType)) { return((IProperty)null); } return(bindingPropertyInfo.Property); }