Ejemplo n.º 1
0
        public virtual void Drop(DropInfo dropInfo)
        {
            int         insertIndex     = dropInfo.InsertIndex;
            IList       destinationList = DefaultDropHandler.GetList(dropInfo.TargetCollection);
            IEnumerable data            = DefaultDropHandler.ExtractData(dropInfo.Data);

            if (dropInfo.DragInfo.VisualSource == dropInfo.VisualTarget)
            {
                IList sourceList = DefaultDropHandler.GetList(dropInfo.DragInfo.SourceCollection);

                foreach (object o in data)
                {
                    int index = sourceList.IndexOf(o);

                    if (index != -1)
                    {
                        sourceList.RemoveAt(index);

                        if (sourceList == destinationList && index < insertIndex)
                        {
                            --insertIndex;
                        }
                    }
                }
            }

            foreach (object o in data)
            {
                destinationList.Insert(insertIndex++, o);
            }
        }
Ejemplo n.º 2
0
        protected static bool TestCompatibleTypes(IEnumerable target, object data)
        {
            TypeFilter filter = (t, o) =>
            {
                return(t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable <>));
            };

            var enumerableInterfaces = target.GetType().FindInterfaces(filter, null);
            var enumerableTypes      = from i in enumerableInterfaces select i.GetGenericArguments().Single();

            if (enumerableTypes.Count() > 0)
            {
                Type dataType = TypeUtilities.GetCommonBaseClass(DefaultDropHandler.ExtractData(data));
                return(enumerableTypes.Any(t => t.IsAssignableFrom(dataType)));
            }
            else
            {
                return(target is IList);
            }
        }