public TestDroppableViewModel()
        {
            IProfile exProfile = new FileSystemInfoExProfile(null, null);

            DropHelper = new LambdaShellDropHelper <IEntryModel>(
                new LambdaValueConverter <IEntryViewModel, IEntryModel>(
                    (evm) => evm.EntryModel,
                    (em) => EntryViewModel.FromEntryModel(em)),

                new LambdaValueConverter <IEnumerable <IEntryModel>, IDataObject>(
                    (ems) => exProfile.DragDrop.GetDataObject(ems),
                    (da) => exProfile.DragDrop.GetEntryModels(da)),

                (ems, eff) =>
            {
                return(QueryDropEffects.CreateNew(DragDropEffectsEx.Copy));
            },
                (ems, da, eff) =>
            {
                if (ems.Count() > 1)
                {
                    Label = ems.Count() + " items.";
                }
                else
                {
                    Label = ems.First().FullPath;
                }
                return(DragDropEffectsEx.Copy);
            })
            {
                DisplayName = "TestLabel"
            };
        }
Exemple #2
0
        public FileListViewModel(string label)
        {
            Items = new ObservableCollection <FileViewModel>();

            #region Initialize DynamicCommandDictionary

            Commands = new DynamicRelayCommandDictionary()
            {
                ParameterDicConverter = ParameterDicConverters.FromParameterDic(
                    new ParameterDic()
                {
                    { "FileListVM", this }
                })
            };

            Commands.UnselectAll = _unselectCommand;

            #endregion

            #region Initialize DragHelper and DropHelper

            DragHelper = new LambdaShellDragHelper <FileModel>(
                _fileModelConverter,                                                                  //Convert IDraggable (FileViewModel) to M (FileModel), ConvertBack is used.
                _dataObjectConverter,                                                                 //Convert IEnumerable<M> (IEnumerable<FileModel>) to IDataObject, Convert is used.
                () => Items.Where(fvm => fvm.IsSelected).Select(fvm => fvm.Model),
                (fmList) => DragDropEffectsEx.Link | DragDropEffectsEx.Copy | DragDropEffectsEx.Move, //QueryDrag
                (fmList, da, effect) =>                                                               //OnDragCompleted
            {
                if (effect == DragDropEffectsEx.Move)
                {
                    foreach (var f in fmList)
                    {
                        var foundItem = Items.FirstOrDefault(fvm => fvm.Model.Equals(f));
                        if (foundItem != null)
                        {
                            Items.Remove(foundItem);
                        }
                    }
                }
            });

            DropHelper = new LambdaShellDropHelper <FileModel>(
                _fileModelConverter,  //Convert IDraggable (FileViewModel) to M (FileModel), Convert is used.
                _dataObjectConverter, //Convert IEnumerable<M> (IEnumerable<FileModel>) to IDataObject, ConvertBack is used.
                (fms, eff) =>         //QueryDrop(IEnumerable<FileModel>, DragDropEffectsEx) : QueryDropEffects
            {
                IEnumerable <FileModel> itemsModel = Items.Select(fvm => fvm.Model);
                if (fms.Any(f => itemsModel.Contains(f)))
                {
                    return(QueryDropEffects.None);
                }
                return(QueryDropEffects.CreateNew(eff & (DragDropEffectsEx.Link | DragDropEffectsEx.Move), eff & DragDropEffectsEx.Move));
            },
                (fms, da, eff) => //Drop(IEnumerable<FileModel>, IDataObject, DragDropEffectsEx) : DragDropEffectsEx
            {
                foreach (var existingFvm in Items)
                {
                    existingFvm.IsSelected = false;
                }
                foreach (var fm in fms)
                {
                    Items.Add(new FileViewModel(fm));
                }
                if (eff.HasFlag(DragDropEffectsEx.Move))
                {
                    return(DragDropEffectsEx.Move);
                }
                if (eff.HasFlag(DragDropEffectsEx.Copy))
                {
                    return(DragDropEffectsEx.Copy);
                }
                return(DragDropEffectsEx.Link);
            })
            {
                DisplayName = label
            };

            #endregion
        }