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);
 }
Пример #2
0
        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);
        }