示例#1
0
        public CanvasViewModel()
        {
            Commands = new DynamicRelayCommandDictionary()
            {
                ParameterDicConverter = ParameterDicConverters.FromParameterDic(
                    new ParameterDic()
                {
                    { "CanvasVM", this }
                })
            };

            Commands.UnselectAll = new SimpleScriptCommand("UnselectAll",
                                                           pd =>
            {
                pd.GetValue <CanvasViewModel>("{CanvasVM}").UnselectAll();
                return(ResultCommand.NoError);
            });
            for (int i = 1; i < 20; i++)
            {
                Items.Add(new ItemViewModel("Test" + i));
            }

            Items[0].IsSelected = true;
        }
示例#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
        }